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.
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 =)
teşekkürler phpde kendimce sayfa derliyorum bu hazırlamış oldugun konu iyi bir deneyim oldu benim için 😉
Merhaba paylaşım için çok teşekkürler, kodlama tamamen sizemi ait yoksa başka kaynaklardanmı derlediniz?
Verdiğin kodlar için teşekkürler fakat bu kodu çalıştırınca hata verir (: Neden mi?
Örneğin 70. satır;
şeklinde değil de
Ş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
Gayet Türkçe zaten örnek adam php yi mi Türkçe yazcak :s
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.
çok teşekkürler kodu arşivime aldım artık çoğu scriptimde kullanıcam.
teşekkürler birkaç düzenlemeden sonra yazdığım scriptte kullanıyorum
verdiğin bilgiler için teşekkür ediyorum çok faydalı bi çalışma olmuş eline sağlık..
projem için gerekli biri yardım edebilirmi melih_oztrk@hotmail.com
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 …
@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 ? 🙂
paylaşım çok teşekkür ederim.
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.
@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.
@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.
if(isset ($_GET[“kat_no”]))
echo “Sonraki Sayfa »”;
(a) –> a değiştirin.
paylaşım çok işime yaradı gayet de açıklayıcı olmuş teşekkürler…
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.
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 ?
@Sedat Göç, sql sorgusunun sonuna “order by ID desc” yazmarak istediğin sonuca ulaşabilirsin.
Ö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”;
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.
Gerckten yaklask bi haftadır arıyorm duzgn bsy bulamamstm emegnize saglık ..
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”>
Teşekkürler. İşime yarıyacağına eminim.
Güzel bir uygulama olmuş. Teşekkürler
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
teşekkürler. çok işime yaradi çalışmalrınızın devamını içtenlikle dilerim
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.
mysql baglantısındaki id ve sayfa tam olarak ne oluyor id tablo adı sayfa tablodaki alan adı mı?
alıntı veya değil çok mu önemliydi?sonuçta aradığınızda burda buluyorsunuz önemli olan paylaşılması.
<?
$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
Yararlı bir paylaşım