PHP Veri Sayfalama

PHP ile veri sayfalama mantığı oldukça karışık gibi durmasına rağmen aslında düşünüldüğünde basit ama uygulamaya geçirmesi biraz zor gelebilecek bir olaydır. PHP sitelerde veritabanından veri çekilmesi ve ekrana bastırılması durumunda eğer veritabanı çok fazla veri ile doluysa hepsinin tek tek ekrana bastırılması sunucu ve client taraflı kasılmalara sebep olabilir. Bir diğer olay ise çok basit bir kaç iş için diğer tüm verilerle yüz göz olmak zorunda kalabiliriz. Bunun olmasını engellemek için en basit şekilde sayfalama yapar ve bir çok veri varken bir kaç tanesinin her bir sayfada sıralanmasını ve sadece olduğunuz sayfadakilerin görüntülenmesini sağlayabiliriz. Hadi hemen yapmaya başlayalım öyleyse:

//Sayfalama için işlemler:
//Sayfa numarası alınıyor no değişkeni ile.
@$no = $_GET["no"];
//Sayfa numarası yerine admin de olsa numaradan başka bir şey girmesi engelleniyor. Eğer başka bir şey girerse otomatikman sayfa numarası 1 olarak alınıyor.
if (eregi (“^[0-9]{1,}$”, $no, $no)){
$no = $no[0];
}
else {
$no = 1;
}
//Eğer sayfa numarası girilmemişse otomatik olarak ilk sayfa açılıyor.
if(empty($no)){
$no = 1;
}
//Her sayfada listelenecek veri sayısı giriliyor. Burayı istediğiniz gibi değiştirebilirsiniz size bağlı.
$sayfalik_kayit = 20;
//Toplam kayıt bulunuyor. Ben örnek olsun diye kendi veritabanımdan bir arama yapıyorum siz kendi veritabanınıza göre bunu değiştirirsiniz.
$toplam_kayit = mysql_query(“SELECT count(*) FROM veritabanim“, $baglanti_pointer);
//Toplam kaç sayfa olması gerektiği bulunuyor.
$toplam_sayfa = ceil($toplam_kayit/$sayfalik_kayit);
//Eğer olmayan sayfa girilmişse otomatik olarak ilk sayfa açılıyor.
if($no>$toplam_sayfa){
$no = 1;
}
//Açık olan sayfada listelenecek ilk kayıt numarası.
$baslangic = (($no*$sayfalik_kayit)-$sayfalik_kayit);
//Açık olan sayfada listelenecek son kayıt numarası.
$bitis = ($no * $sayfalik_kayit);
//Listeleme için seçilen veriler. Burada desc son girilen veriden ilk girilen veriye doğru bir sıralama yaptırtıyor eğer tam tersini isterseniz “desc” ibaresini silmeniz yeterli olacaktır.
$verilerim = mysql_query(“select * from veritabanim order by no desc limit $baslangic,$bitis”, $baglanti_pointer);
//Eğer sayfamız 1′den büyükse o zaman geri linki oluşturup ekrana yazdırıyoruz.
if($no>1){
echo ‘<a href=’.$PHP_SELF.’?sayfa=uyeler&no=’.($no-1).’>Geri</a> | ‘;
}
//For döngüsü ile diğer sayfaların linkini ekrana yazdırıyoruz.
//Eğer sayfa numaralarında eksik ya da fazla varsa (i+1) ile oynanacak.
for($i=0; ($i+1)<$toplam_sayfa; $i++){
if($no == ($i+1)){
echo ($i+1).’ ‘;
}
else{
echo’ <a href=’.$PHP_SELF.’?sayfa=uyeler&no=’.($i+1).’>’.($i+1).’</a> ‘;
}
}
//Eğer toplam sayfamız şu anda bulunduğumuz sayfanın bir fazlasından daha fazla ise o zaman ileri linki oluşturuyoruz.
if($toplam_sayfa>($no+1)){
echo’| <a href=’.$PHP_SELF.’?sayfa=uyeler&no=’.($no+1).’>İleri</a>’;
}
//VERİLERİ YAZDIRMA: Yine burası size uygun yazılacak alan ama ben yine örnek olması açısından kendi veritabanımdaki verileri ekrana tablo olarak bastırıyorum.
//Tablo oluşturuluyor.
echo ‘<center><table border=”1″>’;
echo “<tr>
<td><font face=’verdana’ size=’2′ color=’red’>Veri No</font></td>
<td>&nbsp;<font face=’verdana’ size=’2′ color=’red’>Veri Adı</font></td></tr>”;
while($verim = mysql_fetch_array($verilerim)){
echo “<tr>
<td><center><font face=’verdana’ size=’1′ color=’black’>”.$verim['no'].”</font></center></td>
<td><center><font face=’verdana’ size=’1′ color=’black’>”.$verim['ad'].”</center></font></td></tr>”;
}
echo “</table></center>”;

Evet satır satır açıklama çalıştım umarım faydalı olmuştur. Yine de aklınızda kalan soru işareti varsa lütfen çekinmeden sorun, teşekkürler.

Bu yazı toplam 532 kere görüntülenmiştir.

0saves
Eğer yazıyı beğendiyseniz lütfen yorum bırakın veya diğer yazılardan haberdar olmak için RSS'e üye olun..

İlgili Yazılar:

Yazar Hakkında


Yazar:

Hakkında / İlgi Alanları: Fırat Koyuncu, web hastası bir insanım. Web demek yetersiz aslında bilişim hastası bir insanım. www.twitter.com/fkdesigner ve www.facebook.com/fkdesigner olarak sosyal medyada da takip edebilirsiniz aranızda bilişimciler varsa bilişim üzerine konuşmak, yeni projeler üretmek, takım çalışması yapmak acayip hoşuma giden şeyler arasındadır. Ve açık kaynağı aşırı bir şekilde desteklemekteyim.
Kategori: PHP, May 28th, 2011

Yazarlarımızdan , bu yazı dahil toplam 2 adet yazı yazmış.

6 yanıt

  • dersda says:

    eregi ne ? eregi mi kaldı

  • FK Designer says:

    Sevgili dersda, sınırlı tanıdığım fanatik php 5.3′cü var sanırım onlardan birisin ya da yeni bir tanesi :) PHP kendini geliştirirken geriye dönük kodlarını unutmuyor, onları da sahipleniyor çalıştırıyor yeni versiyonlarında, ha kaldı ki yapmazsa da elbette alternatifi bulunur haksız mıyım :) Teşekkürler.

  • default.aspx says:

    $baglanti_pointer ne amaçla?

  • FK Designer says:

    Normalde veritabanına mysql connect ile bağlanabilmek için bir pointer yaratıyorum ve onu baglanti.php gibi ayrı bir dosya olarak bir çok şeyin içine include edip kullanıyorum. Bu veri sayfalama da bir başka projemde gerekli olmuştu ve o zaman yazmıştım yazdığım zaman buraya yazarken pointerıda almışım. Aslında gerek yok bunu yapmaya sunucu veritabanını biliyor her sorguda connect etmenin bir lüzumu yok ama benim localhostum da hata veriyordu o yüzden her sorguda pointer kullanıyordum. Uzun lafın kısası siz yazmasanız da olur yazarsanız da en başa $baglanti_pointer isimli bir değişkene mysql connect tanımlamanız yeterli olur.

  • nosteam says:

    müdür bu $PHP_SELF ne oluyor acaba

  • FK Designer says:

    @nosteam $PHP_SELF sayfanın kendi ismine karşılık geliyor orada. Yani dosyanın adı dosya.php ise onu yazdırıyor link uzantısına ama tabi eski Php versiyonuyla yazdığım için PHP 5′te de geçerli mi değil mi bilmiyorum ama tabi alternatifi bulunur geçerli değilse.



Cevap yaz