PHP ile Sayfalama Yapımı

PHP ile sayfalama yapımını mantık olarak LIMIT ile satır sayısını alıp onu sayfalara bölmek anlamına getirebiliriz.
İletişim sayfasından bana ulaşarak bu dersi sabırla bekleyen sayın Süleyman Vural’a gösterdiği sabrından dolayı da teşekkür etmek isterim.

Birçok yoğun projeden fazla ders ekleme imkanım olmadı. Fakat yine de pek fazla detaya girmeden öncelikle örnek olarak yaptığım kodları paylaşacağım. Kodlar kütüphanemden örneğe çevirdiğim kodlardır.  SQL dosyasıyla birlikte çalışma dosyasını indirip localhostta deneme yanılma yöntemini kullanarak çalışmalar da yapabilirsiniz.

İleri ve geri sayfaları mantık olarak +1 ve -1 yapmaktan kaynaklanıyor. Yani İlerisi için şu anki sayfadan +1 arttırıyoruz ve gerisi içinde -1 azaltıyoruz. Kodlara bakarak daha iyi anlayabilirsiniz.

<?php

include ("ayar.php");

$limit = 5;

$git = @$_GET["git"];

if(empty($git) or !is_numeric($git)) {

$git = 1;

}

 $count		 = mysql_num_rows(mysql_query("SELECT id FROM sayfa"));
 $toplamsayfa	 = ceil($count / $limit);
 $baslangic	 = ($git-1)*$limit;

$sorgu = "SELECT * FROM sayfa ORDER BY id ASC LIMIT $baslangic,$limit";

$yazdir_sorgu = mysql_query( $sorgu, $mysqlbaglantisi) or die(mysql_error() );

while ($yazdir = mysql_fetch_array($yazdir_sorgu)){

echo $yazdir['title'];
echo "<br>";

}

if($count > $limit) :
 $x = 2; // akrif sayfadan önceki/sonraki sayfa gösterim sayisi
 $lastP = ceil($count/$limit);

 if($git > 1){

 $onceki = $git-1;

 echo "<a href=\"?git=$onceki\">« Önceki Sayfa </a>";

 }

 // sayfa 1'i yazdir
 if($git==1) echo "<span class=\"sayfa\">[1]</span>";
 else echo "<a href=\"?git=1\">[1]</a>";
 // "..." veya direkt 2
 if($git-$x > 2) {
 echo "...";
 $i = $git-$x;
 } else {
 $i = 2;
 }
 // +/- $x sayfalari yazdir
 for($i; $i<=$git+$x; $i++) {
 if($i==$git) echo "<span class=\"sayfa\">[$i]</span>";
 else echo "<a href=\"?git=$i\">[$i]</a>";
 if($i==$lastP) break;
 }
 // "..." veya son sayfa
 if($git+$x < $lastP-1) {
 echo "...";
 echo "<a href=\"?git=$lastP\">[$lastP]</a>";
 } elseif($git+$x == $lastP-1) {
 echo "<a href=\"?git=$lastP\">[$lastP]</a>";
 }

 if($git < $lastP){

 $sonraki = $git+1;

 echo "<a href=\"?git=$sonraki\"> Sonraki Sayfa » </a>";

 }

endif;

?>

Çalışma dosyasını buradan indirip ayar.php dosyasından kendi mysql bağlantı ayarlarını yaparak sql dosyasınıda import ederek örneği inceleyebilirsiniz.
Kavradıktan sonra kendi sayfalama sistemlerinizide geliştirirsiniz.

35 thoughts on “PHP ile Sayfalama Yapımı


  1. teşekkür ederim bende php ye yeni başladım ama örneğiniz gercekten kolay anaşılır olmuş ancak eleştirmek gibi olmasın ama değişkenlerinize türkce anlaşılır isimler verseniz daha cabuk anlardım =)


  2. Merhaba paylaşım için çok teşekkürler, kodlama tamamen sizemi ait yoksa başka kaynaklardanmı derlediniz?


  3. Verdiğin kodlar için teşekkürler fakat bu kodu çalıştırınca hata verir (: Neden mi?

    Örneğin 70. satır;

    echo "<a href="?git=$sonraki"> Sonraki Sayfa » </a>";
    

    şeklinde değil de

    echo "<a href=\"?git=$sonraki\"> Sonraki Sayfa » </a>";
    

    Şeklinde olması gerekiyor 🙂 yani ” koyarsanız otomatik olarak echo komutunu kapatmış olacaksınız ve sayfa hata verecek bunu engellemek için echo içinde ” kullanmanız gerekiyorsa ” kullanacağınız yerlerin başına \ koymanız yeterli olacaktır yukarıda verdiğim örnekteki gibi..

    ve altına keşke alıntıdır yazsaydınız 🙂 alıntı değildir demeyin. eğer siz bunu kendiniz kodlamış olsaydınız denemiş olurdunuz. denemiş olsaydınız bu hatanın farkına varırdınız.

    Saygılarımla


  4. Gayet Türkçe zaten örnek adam php yi mi Türkçe yazcak :s


  5. Ahmet D yani adam paylasmıs yazmıs çizmiş hemen gelip ne die öyledir böyledir diosun. ne güzel herkez faydalanıyor. bende aldım şimdi seo ya uyarlamaya calısıcam.


  6. verdiğin bilgiler için teşekkür ediyorum çok faydalı bi çalışma olmuş eline sağlık..


  7. mysql_fetch_array() neden sql cümlesi değişkeni $sorgu yu direk kullanmadınız $yazdır_sorgu değişkeni performansı etkilemezmi? vede mysql_close() neden kullanılmaz bizim türk scriptlerinde anlamadım …


  8. @gökan adam yapıcağını yapmış neden yaranılamamazlık söz konusu. deki, güray bu şekilde düzenleyelim mantık budur / bu olur. ne yani ne bu hiddet – celal ? 🙂


  9. Sayın site sahibim,
    Mümkünse buna bir de sorgu içine değişken eklesek. Yani bir menüden tıklanıp gelen değere göre çekilip sayfalama yapılıyorsa alınan sorgu değişkenini hafızada tutturamıyorum bir türlü. Benzeri birçok sayfalama yöntemi denedim ama sonuçta mantık olarak hepsi aynı. Sorumu biraz daha açayım isterseniz.
    Bir menüm var ürün kategorileri adında. Oradaki linklerde kat_no=001 diye linklendiriyorum. Tıklandığında urun_listesi.php ye gidiyoruz. urun_listesi.php de kategori numarası 001 olan ürünler çekilip sayfalama yapılıyor. Fakat kat_no su 001 olan ürünleri çekmesini sayfalamanın sonraki sayfalarına geçtiğimde yaptıramıyorum çünkü gelen değişken sadece ilk sayfada kalıyor sonraki sayfalara taşıyamıyorum. Bu konuda bir marifetiniz varmıdır sayın adminim. Varsa çok mabule geçer, benden çok dua alırsın.


  10. @Nejdet Acar

    Anladığım kadarıyla sorunuz şu;

    $count = mysql_num_rows(mysql_query(“SELECT id FROM sayfa”));

    bakın burada $count değişkeni “sayfa” tablosu içerisindeki ID dizinlerini sayar. Bu kodu kendinize uyarlamalısınız. sadece veri tabanındaki tablo ismini değiştirmekten bahsetmiyorum bu yetmez. Kategorileme yaptıysanız sorgunuzun muhtelen en azından şunları içeriyordur.

    Örneğin;

    $kat_no = $_GET[“kat_no”];
    şeklinde url’den değişkeni çektiğini varsayarak;

    sorgu şu şekilde olmalı;
    $count = mysql_num_rows(mysql_query(“SELECT id FROM sayfa WHERE kat_no =’$kat_no'”));

    burada kat_no(ilk olan) veri tabanınızdaki sütundan geliyor.bunu kendinize göre değiştirmelisiniz.böylece $count değişkeni mevcut koşullara göre toplam sayfa sayısını hesaplayabilecek. yukarıdaki örnek kod tüm tabloyu sayar.

    bu şekilde 5.2.x sürümlerinde çalışır ama 5.3.x ve üzerinde çalışmaz değişken kontrolü yaptırmalısız ek olarak, yani;

    if(isset($kat_no))
    $count = mysql_num_rows(mysql_query(“SELECT id FROM sayfa WHERE kat_no =’$kat_no'”));

    biraz mantığını açıklamak istediğim ama sorunuzun kısa cevabı şudur;
    $count sorgusuna listeleme yaparken kullandığınız WHERE Clause da ekleyin.


  11. @Nejdet Acar
    sorunuza tekrar baktım sanırım yanlış anladım galiba şunu demek istemişsiniz;

    url örneğin;
    sayfa.php?kat_no=001

    iken ikinci sayfaya geçince
    sayfa.php?git=2 oluyor ve ?kat_no değişkeni siliniyor.

    eğer sorun bu ise çözüm(yukarıdaki kodu örnek alıyorum);

    if(isset $_GET[“kat_no”])
    echo “Sonraki Sayfa »“;

    bu şekilde ?kat_no değişkenini saklamış olursunuz.


  12. Sistem çok güzel çalışıyor fakat id sistemine göre en baştakini alıyor.Ben ise en sondan başlayıp en başa doğru sıralansın istiyorum.bir çok yöntem denedim ama olmadı.Nasıl yapabilirim.


  13. yukarıdaki ile ?s=4&page=3 yapılabiliyor. Peki aynı kod satırlarında ?s=4&katid=8&page=3 kontrolü nasıl yapılır ?


  14. Öncelikle kodlar için çok teşekkür ederim, sanırım Nejdet Acar’ın yaşadığı sorunu ben de yaşıyorum,1.sayfada problem yok,2. sayfaya geçtiğim zaman bomboş çıkıyor, yukarıdaki cevabınızı okudum ancak php bilgim anlamama yetmedi, aşağıda çektiğim değişkenleri verdim, bir yok gösterirseniz çok sevinirim.

    $snf = $_POST[‘snf’];
    $drs = $_POST[‘drs’];
    $unit = $_POST[‘unit’];
    $konu = $_POST[‘konu’];
    $hepsi = $_POST[‘hepsi’];
    $dnm = $_POST[‘dnm’];
    $snv = $_POST[‘snv’];

    $count = mysql_num_rows(mysql_query(“SELECT fldstokid FROM tblstokkarti WHERE snf=’$snf’ and ders=’$drs’ and unit=’$unit’ and konu=’$konu’ “));
    $toplamsayfa = ceil($count / $limit);
    $baslangic = ($page-1)*$limit;

    $sorgu = “SELECT * FROM tblstokkarti WHERE snf=’$snf’ and ders=’$drs’ and unit=’$unit’ and konu=’$konu’ ORDER BY fldstokid DESC LIMIT $baslangic,$limit”;


  15. Teşekkürler anlaşılır bir yazı olmuşta yalnız diyelimki elimizde 1000 adet içerik var. Bunu 50 şerli olarak sayfalamak istiyorum yani 1000/50= 20 sayfa yapıyor. Bu kodu nasıl çevirip istediğim gibi yapabilirim.


  16. Gerckten yaklask bi haftadır arıyorm duzgn bsy bulamamstm emegnize saglık ..


  17. Merhaba paylaşımınız için teşekkür ederim aşağıdaki gibi bir sorgum var fakat bir türlü sayfalamayı başaradım, yardımlarınızı bekliyorum,

    <img src="” alt=””>
    Kişilik
    Bagaj

    Günlük :

    <a href="Rezervasyon-Yap–.html”>


  18. merhabalar öncelikle teşekkürelr gayet açık ve anlaşılır olmuş
    peki yanyana ve alt alta listelemek istiyorum nasıl yapabılırım ?
    veritabanından fotoğraf çekiyorum yanyana 5 tane 5de satır olacak sekılde nasıl yapabilirim?bununla ilgili bir bir örnek yaparsanız sevinirim saygılar


  19. teşekkürler. çok işime yaradi çalışmalrınızın devamını içtenlikle dilerim


  20. Merhaba Güray,

    Öncelikle teşekkürler. Tam da yapmak istediğim bir sayfalama tekniğiydi. En eksik, ne fazla… Başlamadan önce internette örnek aramak istedim ve site karşıma çıktı. Çok güzel kodlamışsın, tebrik ediyorum.


  21. mysql baglantısındaki id ve sayfa tam olarak ne oluyor id tablo adı sayfa tablodaki alan adı mı?


  22. alıntı veya değil çok mu önemliydi?sonuçta aradığınızda burda buluyorsunuz önemli olan paylaşılması.



  23.  
     

    <?
    $paket=mysql_query("SELECT * from urun where kid='".$kid."'");
    if(mysql_num_rows($paket)==0)
    print "

    Bu kategoriye daha önce ürün eklenmemiş.
    “;
    while($p=mysql_fetch_array($paket)){
    if($satir%3==0){echo ”

    “;};
    ?>

    <a class="dd4" href="urun.php?id=”>..

    <a href="urun.php?id=”>
    <img src="admin/uresim/_b.jpg” width=”180″ height=”180″ border=”0″/>

    Fiyatı :
    TL

    <a href="urun.php?id=”>Detaylar

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir