PHP Dersleri, MySQL ve Açık Kaynak


« 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 Yorum


  • 11 Şubat 2010
    murat inal yazdı


    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 =)

  • 27 Mayıs 2010
    Burdayiz.NET yazdı


    teşekkürler phpde kendimce sayfa derliyorum bu hazırlamış oldugun konu iyi bir deneyim oldu benim için 😉

  • 19 Kasım 2010
    Serdar yazdı


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

  • 13 Ocak 2011
    Mehmet D. yazdı


    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

  • 19 Ocak 2011
    Ahmet ÇOBAN yazdı


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

  • 25 Mart 2011
    Atlantis yazdı


    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.

  • 27 Nisan 2011
    ilqercan yazdı


    çok teşekkürler kodu arşivime aldım artık çoğu scriptimde kullanıcam.

  • 07 Mayıs 2011
    şafak saraçoğlu yazdı


    teşekkürler birkaç düzenlemeden sonra yazdığım scriptte kullanıyorum

  • 07 Mayıs 2011
    jackrw yazdı


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

  • 28 Mayıs 2011
    adddd ddd yazdı


    projem için gerekli biri yardım edebilirmi melih_oztrk@hotmail.com

  • 11 Kasım 2011
    gökan sel yazdı


    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 …

  • 23 Kasım 2011
    Fatih Toprak yazdı


    @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 ? 🙂

  • 31 Ocak 2012
    Mustafa yazdı


    paylaşım çok teşekkür ederim.

  • 14 Şubat 2012
    Nejdet Acar yazdı


    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.

  • 19 Şubat 2012
    Recep Şimşek yazdı


    @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.

  • 19 Şubat 2012
    Recep Şimşek yazdı


    @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.

  • 19 Şubat 2012
    Recep Şimşek yazdı


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

    (a) –> a değiştirin.

  • 24 Mart 2012
    Fatih Sinan Yaman yazdı


    paylaşım çok işime yaradı gayet de açıklayıcı olmuş teşekkürler…

  • 29 Mart 2012
    Sedat Göç yazdı


    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.

  • 03 Nisan 2012
    mustafa albayrak yazdı


    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 ?

  • 18 Temmuz 2012
    sezer yaman yazdı


    @Sedat Göç, sql sorgusunun sonuna “order by ID desc” yazmarak istediğin sonuca ulaşabilirsin.

  • 15 Eylül 2012
    Kemal Karakaya yazdı


    Ö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”;

  • 13 Ekim 2012
    Ben yazdı


    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.

  • 24 Kasım 2012
    Windofelm yazdı


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

  • 19 Aralık 2012
    Kutup yazdı


    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”>

  • 28 Aralık 2012
    beta.web.tr yazdı


    Teşekkürler. İşime yarıyacağına eminim.

  • 14 Ocak 2013
    istanbul asansör yazdı


    Güzel bir uygulama olmuş. Teşekkürler

  • 09 Mayıs 2013
    samet özelci yazdı


    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

  • 01 Haziran 2013
    yunus emre incu yazdı


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

  • 27 Haziran 2013
    Aziz yazdı


    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.

  • 08 Temmuz 2013
    Umut yazdı


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

  • 22 Ağustos 2013
    Burak yazdı


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

  • 27 Kasım 2013
    turgut yazdı



     
     

    <?
    $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

  • 26 Ocak 2016
    Dosya yükle yazdı


    Yararlı bir paylaşım

Yorumla

Filbahri.com | PHP ile Sayfalama Yapımı