Merhaba arkadaÅŸlar. Bu makalemizde php ile veritabanından verileri çekip sayfalama iÅŸlemini anlatacağım. Özetle mantığını anlatayım. Sayfamızdaki kayıtları get ile gönderdiÄŸimiz sayfa deÄŸerleri ile yönetiyoruz. Bir sayfada 5 kayıt gösterileceÄŸini varsayalım. Get ile gönderilen deÄŸer 2 ise eÄŸer 5'ten fazla kayıt varsa 5-10 arasını gösterecektir. Get ile deÄŸerleri nereden gönderiyoruz der iseniz kayıtlarımızın altına bir döngü kuruyoruz. Veritabanımızdaki kayıt sayısına göre sayfa numarası çıkartıyoruz. Örnek olarak her sayfada 5 kayıt listelediÄŸimizi düÅŸünürsek veritabanımızda eÄŸer 12 kayıt varsa bu kayıtları ancak 3 sayfada gösterebiliriz. Yani alt kısımda 3 adet sayfa linki bulunacaktır. Bir kısmının mantığını anlattım. Åžimdi kodlarımıza geçelim.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="stil.css" type="text/css" media="screen">
<title>
Php ile Sayfalama
</title>
</head><body>
<table border="0" id="kayitlar" cellpadding="3" width="400" cellspacing="2">
<tr id="baslik">
<td>
No
</td>
<td>
İsim
</td>
<td>
Soyisim
</td>
<td>
Tel-Numarası
</td>
</tr>
$mak = $_GET['m']; //bulunduğumuz sayfa değeridb.php Sayfamız
include ("db.php"); //bağlantı sayfamız
$sayfamiktar = 5; //görüntülenecek kayıt sayısı
if ($mak == ""){ //get ile değer gelip gelmediğini kontrol ettik. Gelmediyse $mak değişkenimize 1 değerini atadık.
$listele = mysql_query("SELECT * FROM bilgiler order by no desc LIMIT 0,".$sayfamiktar."");
$mak = 1;
}
if ($mak == 1){ //get ile gelen deÄŸere göre sorgulama yapıyoruz.
$listele = mysql_query("SELECT * FROM bilgiler order by no desc LIMIT 0,".$sayfamiktar."");
} else if ($mak == 2){
$listele = mysql_query("SELECT * FROM bilgiler order by no desc LIMIT 5,".$sayfamiktar."");
}else if ($mak == 3){
$listele = mysql_query("SELECT * FROM bilgiler order by no desc LIMIT 10,".$sayfamiktar."");
}
while($bas = mysql_fetch_array($listele)) //kayıt listeleme işlemi
{
$no = $bas['no'];
$ad = $bas['ad'];
$soyad = $bas['soyad'];
$tel = $bas['tel'];
echo "<tr id='liste'>
<td>
$no
</td>
<td>
$ad
</td>
<td>
$soyad
</td>
<td>
$tel
</td>
</tr>";
}
echo "</table>";
$kayitsayi = mysql_query("SELECT * FROM bilgiler");
$kayitsayisi = mysql_num_rows($kayitsayi); //kaç satır veri olduÄŸunu öÄŸrendik
if ($kayitsayisi <= 5) //kayıtlarımızı kaç sayfada göstereceÄŸimizi buluyoruz. 15 kayıta kadar kontrol ettik.
{
$asilsayi = 1;
} else if ($kayitsayisi <= 10)
{
$asilsayi = 2;
} else if ($kayitsayisi <= 15)
{
$asilsayi = 3;
}
$ileri += $mak;
$ileri += 1; // 1 ekledik.
$geri += $mak;
$geri -= 1; // 1 çıkardık.
if ($asilsayi > 1){
echo '<ul id="sayilar">';
if ($geri != 0){
echo '<li><a href="index.php?m='.$geri.'"><</a></li>'; }
for ($i=1; $i <= $asilsayi; $i++)
{
if ($mak == $i)//get ile gelen deger ile ÅŸuan dönen deÄŸer eÅŸit ise link vermedik.
{
echo '<li><a title="asd" style="color:#ffffff; background:#cccccc;">'.$i.'</a></li>';
}else {
echo '<li><a href="index.php?m='.$i.'">'.$i.'</a></li>';
}}
$ileri2 = $ileri - 1;
if ($asilsayi > $ileri2){
echo '<li><a href="index.php?m='.$ileri.'">></a></li>'; }
echo '</ul>';
}
$mysql_host="localhost";Yaptığımız iÅŸlemleri sırasıyla anlayalım ÅŸimdi. İlk olarak get deÄŸerimiz bir deÄŸiÅŸkene aktardık. Sonrasında baÄŸlantı sayfamızı include ettik. Listelenmesini istediÄŸimiz kayıt sayısını deÄŸiÅŸkene aktardık. Get ile deÄŸer gelip gelmediÄŸini kontrol ettik. EÄŸer gelmediyse $mak deÄŸiÅŸkenimize 1 deÄŸerini atadık ve ilk 5 kaydı listeleyecek sql sorgumuzu yazdık. Sonra if ÅŸartlarımız yardımıyla get ile gelen deÄŸere göre sorgulama yapıyoruz. ÖrneÄŸin gelen deÄŸer 2 ise ikinci sayfamızdaki kayıtları göstermemiz gerekiyor. Bunun için sql kodumuzdaki limit deÄŸerinin ilk kısmına 5 yazıyoruz. Yani ilk 5 kayıttan sonraki 5 kaydı($sayfamiktar deÄŸiÅŸkenimiz ile belirtiyoruz) listelemesini istiyoruz. Ben 15 kayda kadar kontrol ettim. Toplam 3 sayfaya karşılık geliyor. Sayfa sayısını artırmak sizin elinizde. Åžimdi geçelim while döngümüze.
$mysql_kullaniciadi="root";
$mysql_sifre="root";
$mysql_vtadi="sayfalama";
$baglan= @mysql_connect($mysql_host,$mysql_kullaniciadi,$mysql_sifre);
mysql_query("SET NAMES UTF8");
if(! $baglan) die ("mysql bağlantısında hata oluştu");
mysql_select_db($mysql_vtadi,$baglan) or die ("veritabanına bağlanırken hata oluştu");
Mysql_fetch_array ile listeleme iÅŸlemi yaptık, deÄŸiÅŸkenlere atadık ve ekrana yazdırdık. Åžimdi yukarıdaki görselde de görmüÅŸ olduÄŸunuz sayfa numaralarımıza geçelim. Veritabanımızda kayıt sayısını mysql_num_rows fonksiyonu sayesinde bulduk ve deÄŸiÅŸkene aktardık. Sonra if ile bir ÅŸartlandırma yaptık. Bunu yapmamızın amacı for döngümüzü kaç kere döndüreceÄŸimizi bulmaktır. Yani kaç tane sayfa linki vereceÄŸimizi bulduk. Kayıt sayısı 5 ise veya daha düÅŸükse döngümüz 1 kere dönecektir. Kayıt sayımız 10 veya altındaysa döngümüz 2 kere dönecektir. Sonraki if deyimimizde sayfa sayısını kontrol ettik. Yani 5’ten fazla kayıt olup olmadığını. 5’ten az kayıt varsa zaten sayfa numaralarının ekrana basılmasına gerek kalmayacaktır. 5’ten fazla kayıt mevcut ise if ÅŸartımızın içini iÅŸleme alacaktır. Sayfa numaralarını listelettik. İleri butonu bizi 1 ileri sayfaya taşımak için vardır. Aynı ÅŸekilde geri butonu bizi 1 geri taşımak için vardır. Bu butonlarımızın standart bir linki olmayacak. Her sayfaya geçildiÄŸinde deÄŸiÅŸmek zorundadır. Get ile gelen deÄŸeri $ileri ve $geri deÄŸiÅŸkenlerimize aktardık. Aktarmamızın nedeni hangi sayfada olduÄŸumuzu bulmaktır. Sonrasında $ileri deÄŸiÅŸkenimizi bizi bir sonraki sayfaya taşıması için 1 artırdık. Aynı ÅŸekilde $geri butonumuzun bizi 1 geri taşıması için eksilttik. Sonra butonlarımızı if ÅŸartına soktuk. Åžarta sokmamızdaki amaç 1. sayfadayken geri butonumuzun gözükmemesini saÄŸlamaktır ve son sayfadayken ileri butonunun gözükmemesini saÄŸlamaktır. Böylelikle makalemizin sonuna gelmiÅŸ bulunmaktayız. Anlamadığınız noktaları yorum yolu ile sorabilirsiniz. Sonraki makalelerde görüÅŸmek üzere...
0 Yorum