PHP ile sayfalama mantığı

PHP ile sayfalama mantığı

PHP programlama dilinde satfalama yapmak için nasıl bir mantık kuruyoruz ve nasıl kodlama yapıyoruz merak ediyorsanız buyrun...

            4 Kişi, Ortalama 2 puan vermiş  

PHP programlamaya yeni başlayan kişilerin en çok zorlandığı konulardan birisi sayfalama mantığıdır...
Hemen konuya girerek mantığı anlatmaya başlayalım.
İlk olarak her sayfada kaç adet veri listelemek istiyorsak onu belirliyoruz.Bunu da bir değişkene atayarak yapacağız.

$limit = 10;

Burada her sayfada 10 adet veri listele dedik.
Şimdi; sayfalamanın çalışması için tarayıcıdan gelecek olan string değişkeni belirliyoruz,

$sayfa = $_GET["sayfa"];

Bu tarayıcı adresini belirledik ama art niyetli kişiler yada tarayıcıda oluşabilecek bir hatada ötürü değişkene atanacak farklı bir sayı yada harf dizisi için bir önlem almamız gerekiyor.
Bunu da;

if(($sayfa=="") or !is_numeric($sayfa)){
$sayfa=1; }

kodu ile "eğer sayfa değişkeni boş yada sayısal olamayan bir değer ise değişkene 1 sayısını ata" diye söyledik.
Sobraki yapacağımız işlem veri tabanımızda bulunan satır satısını almak olacak bunu da aşağıda ki sorgu ile alıyoruz;

$satirsayisi = mysql_num_rows(mysql_query("SELECT * FROM veritablosu"));

Toplam kaç adet sayfa olduğunu hesaplamamız gerekiyor bunu aşağıda ki kod ile yapacağız.

$toplamsayfa = ceil($satirsayisi / $limit);

Burada fonkiyon içerisinde dedik ki "satır sayısını al sayfada göstermek istediğim sorgu adedine böl"
ceil() fonkiyonu ise şu işe yarıyor. diyelikmi veri tabanınızda 54 satır var her safaya 10 veri listelemek istiyorsunuz. 54/10 = 5,4 olursa ne olur olmaz işte burada ceil() foksiyonu bu 5,4 sayısını bir üst sayıya yuvarlar yani 6 sayısını toplam sayfa olarak verdirir.
Şimdi yapacağımız işlem; her sayfa da ilk listelenecek olan veriyi belirlemek. yani ilk sayfada 1-10 arası veriyi listeledik ikinci sayfaya geçtiğimizde 11-20 arasındaki veriyi listelemesi için bir başlangıç değeri belirtmemiz gerekiyor. bunu da aşağıda ki kod ile belirliyoruz.

$baslangic= ($sayfa-1) * $limit;

Şimdilik sayfalandırma kodlarımız bitti bundan sonra yapacağımız işlem mysql'dan veri çekerek listelememizi yapmak ama bunu yaparken dikkat etmemiz geerk n iki yer var bunları sorguyu yazdığımda anlayacaksınız.
Sorgu şöyle oalcak

$sorgu = mysql_query("SELECT * FROM veritablosu LIMIT $baslangic,$limit");

Üstteki sorguda başlangıç ve limit değişkenlerinin neden ve nasıl kullanıldığını görüyorsunuz. Bundan sonra normal while dögüsü ile veri listeleme islemimizi yapıyoruz.
Kodları uyguladık ve listelememizi yaptık,
Şimdi yapacağımız işlem sayfalandırma linklerini vermek onuda aşağıdaki şekilde for dögüsü kullanarak yapıyoruz. Bu kodları istediğiniz herhangi bir yere sayfalama linkleriniz nerede görünmesini istiyorsanız ekleyebilirsiniz.

for($x=1; $x< =$toplamsayfa; $x++)
{
  if($x=="1") {echo"1";} else{ echo"$x-";}
}

İnşallah anlaşılır olmuştur.

Kodları toparlayacak olursak;

Sayfalama veri çekme kodları

$limit = 10;
$sayfa = $_GET["sayfa"];
if(($sayfa=="") or !is_numeric($sayfa)){
    $sayfa=1; }
$satirsayisi = mysql_num_rows(mysql_query("SELECT * FROM veritablosu"));
$toplamsayfa = ceil($satirsayisi / $limit);
$baslangic= ($sayfa-1) * $limit;
$sorgu = mysql_query("SELECT * FROM veritablosu LIMIT $baslangic,$limit");

Sayfalama link kodları

for($x=1; $x< =$toplamsayfa; $x++)
{
  if($x=="1") {echo"1";} else{ echo"$x-";} 
}

Sorunu olan yada yapamayanlara elimden geldiğince destek vermeye çalışırım.
Saygılar...

Bu haberi 1192 kişi okudu ve 31 yorum yapıldı.
Yorumlar
Yorumunuz:
PCG Misafir 26 Ocak 2012 Perşembe Saat 18:02

örnek bir çalışma var mı acaba

şafak saraçoğlu 07 Mayıs 2011 Cumartesi Saat 20:04

teşekküre edrim güzel bilgi

Mustafa 08 Temmuz 2011 Cuma Saat 02:13

oyle de yapabilirsiniz...

zafer 16 Mart 2011 Çarşamba Saat 10:41

hocam teşekkürler fakat burada veritabanı bağlantısı yapmamışsınız veritabanı bağlantısı yaptığımız dosyayı include yöntemiyle bu sayfaya mı çekeceğiz

Özkan Önder 20 Temmuz 2010 Salı Saat 17:58

Merhabalar ben verdiğiniz kodları aynen uyguladım LİNK kodlarını yazmadığımda 100 tane veriden 10 tanesini gösteriyor fakat link kodlarını yazdığımda aldığım uyarı bu acaba nerde yanlış yapıyorum.Ayrıca teşekkür ederim bu güzel yazınız için. Parse error: syntax error, unexpected '=', expecting ')' in /home/eylul/public_html/kontrol/deletefile.php on line 78

Sayit Bingül 30 Temmuz 2010 Cuma Saat 13:55

Öncelikle Çok teşekkür ederim üstadım çok takıldığım bir konuydu Allah razı olsun ve yorumlardaki mesajlarınızdan biri gözüme çarptı veritabanını yorar demişsiniz büyük sistemlerde :S bunu aşmak için ne yapmak yada şöyle diim hangi mantığı izlemek gerekir peki?

serhat 08 Haziran 2010 Salı Saat 14:45

sayfalama kodunda hata var vediğini kodu hiç çalıştırdınız mı? Parse error: syntax error, unexpected '=', expecting ') hatası veriyor sayfa linklerini yazdırırken

Samet 14 Ekim 2011 Cuma Saat 14:04

Güzel bilgi teşekkürler.

Batuhan Küçükali 07 Aralık 2011 Çarşamba Saat 01:50

gerçekten güzel anlatım teşekkürler.

return of the cepo 02 Eylül 2010 Perşembe Saat 05:11

Gerçekten süper bir anlatım, bu sayede uzun zamandır anlamadığım sayfalama sistemini çözmüş oldum. Ellerinize sağlık.. --CePraĞilin dönüşü--

chip 29 Temmuz 2010 Perşembe Saat 10:59

ellerine sağlık...

Sinan 18 Şubat 2010 Perşembe Saat 01:45

Sayın Mustafa Bey Anlatımınız Falan Cok Güzel Ama Sayfalama Link Kodunda Hata Var Onu Bize Bi Tabanla Yapıp Anlatırmısnız Yanı Veriyi Cektikten Sonra Nasıl Sayfalanıcak Orda Hata Var.

Abdussamed 03 Mart 2010 Çarşamba Saat 18:34

Teşekkürler sevgili Mustafa, Güzel ve açıklayıcı yazmışsın. ;)

selim 28 Ocak 2010 Perşembe Saat 20:53

if(($sayfa=="") or !is_numeric($sayfa)){ $sayfa=1; } yukarıdaki kod ile $sayfa değişkenini 1 e eşitliyoruz. $baslangic= ($sayfa-1) * $limit; burada ise baslangic=(1-1)x5 yani sıfıra eşitliyoruz bu yüzdende baslangic sürekli olarak 0 dönüyor bu bir hata değilmi? burada karıştırdım.

x3uqm4 12 Ağustos 2010 Perşembe Saat 00:00

Kod hata veriyor. for($x=1; $x< = $toplamsayfa; $x++); Satırında, Parse error: syntax error, unexpected '=', expecting ')' in C:\xampplite\htdocs\body.php on line 39

kadir 03 Şubat 2010 Çarşamba Saat 14:11

$sayfa = $_GET["sayfa"]; bu kısmı anlamadım burda sayfa değişkeniyle neyi çekmeye çalışıyoruz? birde $_POST ile çeksek birşey farkedermi?

mehmet 17 Ekim 2009 Cumartesi Saat 05:49

kodlar hata veriyor özellikle get globaliyle aldığımız sayfa indexi nerede tanımlanan bir index bu index tanımlanmadan nasıl get metoduyla bunu alabiliriz...

albayoneil (stargate) 17 Ekim 2009 Cumartesi Saat 15:39

Kardeş eline ve diline sağlık çok teşekkür ederim.

S.T 01 Mayıs 2010 Cumartesi Saat 01:40

Merhaba, Emrah Mert arkadaşım, bence senin dediğine şöyle bir çözüm olabilir: Tabloyu çekersiniz, ajax ile silinen veri miktarını ajax ile php'ye gönderir ve yeniden listelenecek olan veri limitinden çıkartırız. Böylece listelenecek veri miktarı, önceki sayfada silinen veri miktarı kadar ileriden başlamaz. :) Kolay gelsin...

Güven Şahin 11 Kasım 2009 Çarşamba Saat 13:08

oldukça yararlı oldu benim için.teşekkürler.

Murat Kaya 04 Eylül 2009 Cuma Saat 02:03

çok güzel örnek ve anlatım olmuş. ellerine sağlık emeğine teşekkürler. php yi herkez böyle anlatsa öğrenmeyen kalmaz..

Kemal 18 Aralık 2011 Pazar Saat 11:40

Gerçekten güzel ve anlaşılır bir açıklama olmuş. Emeği geçen arkadaşlara teşekkür ediyorum.

süleyman denizhan 14 Aralık 2009 Pazartesi Saat 01:29

kardeş cok sağolasın cok işime yaradı eyvallah ....

yasin 31 Aralık 2011 Cumartesi Saat 00:42

siteniz çok güzel temanızı sevdim :)

ali 12 Aralık 2009 Cumartesi Saat 18:42

elinize saglık. Anlatımda geri ileri butonlarını ve sayfada 10 link varsa 10.cu linkete ileri dedigimizde linkler kaybolsun 11 12 13 14 15 16 17 18 19 20 şaklinde ekrana basılısn.

Mustafa 18 Haziran 2009 Perşembe Saat 17:38

Ne gibi bir hata veriyor yazarsanız bakayım.

Mehmet 16 Haziran 2009 Salı Saat 20:48

sayfalama link kodunda hata veriyor

Fikret 21 Temmuz 2009 Salı Saat 09:46

Çok teşekkürler.Sayenizde yeni birşey öğrendim.Emeğinize sağlık.

Site Analiz 23 Aralık 2011 Cuma Saat 21:13

Hocam tam istediğim şey emeğine sağlık çok teşekkür ederim. Fakat GET kısmında uyumu bulamadım. Bendeki sistemin linki şu şekilde oluyor. index.php?Site=Analiz&Sayfa=Urunler&ID=1 Burada get ile çektiğimiz "sayfa" kısmına hangi metodu ne şekilde yazmam gerekiyor ?

emrah mert 12 Mart 2009 Perşembe Saat 16:08

Merhaba, konuyu açıkladığınız için çok teşekkürler. Yalnız şöyle bir eksiklikten bahsedeyim size. Diyelim ki verilerimiz iki durumlu. Birincisi onay bekleyenler, ikincisi onaylananlar. Şimdi ben onay bekleyenleri sayfalayarak listeledim. Kullanıcı listeden üç tanesini ajax yardımıyla liste kaybolmadan onayladı. Yani listede şu an yedi onay bekleyen, üç de onaylı kayıt görünüyor. Sonra kullanıcı bir sonraki sayfaya geçmek istedi. Veriler yeniden çekildiğinde 11-20 arası kayıtlar çekildi. Yeni gelen bu 10 kayıt, bir önceki listeleme işleminde 14-24 arası kayıttı. Çünkü 11-14 arası kayıtlar ilk sayfanın elemanıymış gibi algılandı. Çünkü veritabanında değişiklik oldu. Bunu çözmek için tüm verileri tek seferde çekip, bir yerde saklamalı ve yeni bir istek geldiğinde sıradaki 10 taneyi göndermeliyiz.

Mustafa 13 Mart 2009 Cuma Saat 10:17

Bu dediğiniz de olabilir ancak kişi ajax teknolojisini programlayacak kadar bu konuda uzamansa. Listelenen satırlar kaldırıldığında yine ajax ile o sayfayı tamamlayacak ve sayfalamada da ajax kullanacaktır. Bunun için o bir yerde saklama olayıda yine ajax ile olacaktır. Ben bu anlatımı yeni başlayan birkaç arkadaşın gönderdiği istek üzerine yaptım. Zaten aslına satır sayısıda o şekilde alınmaz. Bu şekilde satır sayısı alma büyük veri tabanlı listelemelerde mysql'u çok yoracaktır. Yani eksiklik sadece sizin bahsettiğiniz değil. Ama teşekkür ederim bahsettiğiniz için okuyanlar bu şekilde de bri araştırma yapacaktır...

Popüler Programlar