• 02-03-2009, 17:59:27
    #1
    Arkadaşlar forumda aradım şöyle milletin anlayacağı gibi bir sayfalama mantığına anlatan bir makale yok onuda ben yazayım dedim. Uzatmadan hemen bodoslama dalıyorum konuya.
    İ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ı atamasını 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;
    $result = mysql_query("SELECT count(*) FROM veritablosu");  
    $satirsayisi  = mysql_fetch_array($result);
    $satirsayisi = $satirsayisi[0];
    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.
    Bunu da basit bir şekilde yapalım,
    $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.
    for($x=1; $x<=$toplamsayfa; $x++)
    {
      if($x=="1") {echo"<b><font size='2'>1</font></b>";} 
    else{ echo"<a href=\"index.php?sayfa=$x\"><b><font size='2'>$x</font><</b></a>-";} 
    }
    İnşallah anlaşılır olmuştur.
    Sorunu olan yada yapamayanlara elimden geldiğince destek vermeye çalışırım.
    Saygılar...
    Kodları toparlayacak olursak..
    Sayfalama veri çekme kodları
    $limit = 10;
    $sayfa = $_GET["sayfa"];
    if(($sayfa=="") or !is_numeric($sayfa)){
     	 $sayfa=1; }
    $result = mysql_query("SELECT count(*) FROM veritablosu");  
    $satirsayisi  = mysql_fetch_array($result);
    $satirsayisi = $satirsayisi[0];  
    $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"<b><font size='2'>1</font></b>";} 
    else{ echo"<a href=\"index.php?sayfa=$x\"><b><font size='2'>$x</font><</b></a>-";} 
    }
    Makale PCGazete.Com'da yayınlanmıştır
    PHP ile sayfalama mantığı | PCGAZETE.COM - La Gazzetta della PC
  • 02-03-2009, 18:05:26
    #2
    Üyeliği durduruldu
    ellerinize saglik. küçük bir ek olarak
    $satirsayisi = mysql_num_rows(mysql_query("SELECT * FROM veritablosu"));
    toplam veri sayısını küçük datalarda bu şekilde alirken. büyük hacimli datalarda çok mantıklı bir yaklaşım degildir.

    şöyle bir kod daha uygundur

    $result = mysql_query("SELECT count(*) FROM veritablosu");  
    $satirsayisi  = mysql_fecth_array($result);
    $satirsayisi = $satirsayisi[0];
  • 02-03-2009, 18:07:40
    #3
    Üyeliği durduruldu
    Makale Yeni Başlayan Kişiler İçin Yararlı Cinsten. Teşekkürler.

    Hem Sana Hem Diğer Arkadaşlara da Benden Bi Tavsiye.
    mysql_num_rows'u 100.000 verilik ve Üstü Bi Tabloda Kullanamazsınız. Kullanılamaz.
  • 02-03-2009, 18:08:27
    #4
    Üyeliği durduruldu
    Sdemirkeser, Benden Önce Davranmış bile
  • 02-03-2009, 18:08:52
    #5
    Üyeliği durduruldu
    Dogu_Bey adlı üyeden alıntı: mesajı görüntüle
    Sdemirkeser, Benden Önce Davranmış bile
    hizli silah çekerim
  • 02-03-2009, 18:14:44
    #6
    Teşekkürler arkadaşlar uyarınız için düzeltiyorum
  • 02-03-2009, 21:51:29
    #7
    ders için teşekkürLer
  • 03-03-2009, 10:43:08
    #8
    bu güzel ve açıklayıcı ders için teşekkürler.
  • 03-03-2009, 19:42:30
    #9
    sdemirkeser adlı üyeden alıntı: mesajı görüntüle
    ellerinize saglik. küçük bir ek olarak
    $satirsayisi = mysql_num_rows(mysql_query("SELECT * FROM veritablosu"));
    toplam veri sayısını küçük datalarda bu şekilde alirken. büyük hacimli datalarda çok mantıklı bir yaklaşım degildir.
    şöyle bir kod daha uygundur
    $result = mysql_query("SELECT count(*) FROM veritablosu");  
    $satirsayisi  = mysql_fecth_array($result);
    $satirsayisi = $satirsayisi[0];
    $satirsayisi = mysql_fecth_array($result);

    kısmındaki "fecth" hatalı yazılmış. "fetch" olacak..

    $satirsayisi = mysql_fetch_array($result);