PHP ile veritabanından gelen verileri LIMIT kullanarak kolay bir şekilde sayfalayabiliriz. İlk olarak veritabanı bağlantımızı yapalım ben örnekde ayrı bir php dosyasına(baglan.php) bağlantımı yapıp sayfaya çağırdım sizde aynı şekilde yapabilirsiniz. Şimdi toplam sayfa sayımızı ve toplam veri sayımızı bulalım.
$toplamVeri = $db->query("SELECT COUNT(*) FROM veriler")->fetchColumn(); // Tabloda kaç tane kayıt olduğunu buluyoruz
$goster = 3; // Her sayfada kaç veri görünsün
$toplamSayfa = ceil($toplamVeri / $goster); // Toplam sayfa sayımızı buluyoruz sonucu yuvarlıyoruz
$sayfa = $_GET["s"]; // Sayfa numaramızı get metodu ile yolladığımız "s" değeri ile alıyoruz
if($sayfa < 1) $sayfa = 1; // Eğer kullanıcı sayfa numarasına 1'den küçük değer girerse 1.sayfayı gösteriyoruz
if($sayfa > $toplamSayfa) // Eğer kullanıcı sayfa numarasına toplam sayfadan daha fazla değer girerse en son sayfayı gösteriyoruz
{
$sayfa = (int)$toplamSayfa;
}
$limit = ($sayfa - 1) * $goster; // Veri tabanında listelemme yaparken limit ile kaçıncı veriden başladığını belirtiyoruz.
Bu şekilde kodların açıklamalarını yanlarına yazdık . Artık veritabanımızdan verilerimizi çekelim. Yalnız burda en önemli kısım limit kullanımı olacak. Aşağıdaki kodu yukarıdaki kodumuzdan hemen sonra ekleyelim.
$veriler = $db->prepare("SELECT * FROM veriler LIMIT :basla, :bitir");
$veriler->bindValue(":basla",$limit,PDO::PARAM_INT);
$veriler->bindValue(":bitir",$goster,PDO::PARAM_INT);
$veriler->execute();
$dizi = $veriler->fetchAll(PDO::FETCH_OBJ);
Verilerimizi çektik şimdi ekrana yazdıralım ve sayfalama butonlarını yapalım.
foreach ($dizi as $item) {
?>
<div class="icerik">
<h2><?php echo $item->baslik;?></h2>
<p><?php echo $item->icerik;?></p>
</div>
<hr>
<?php } ?>
Verilerimizi ekrana yazdırdık. (bu kodu yukarıdaki koddan hemen sonra ekleyin veya istediğiniz başka bir yerde foreach döngüsü ile gösterin.)
Son olarak sayfalama butonlarımızı yapalım.
<ul class="sayfalama">
<?php
for($i = 1; $i<=$toplamSayfa;$i++)
{
?>
<li><a href="index.php?s=<?php echo $i;?>"><?php echo $i;?></a></li>
<?php } ?>
</ul>
İsterseniz Css ile daha güzel bir görünüm yapabilirsiniz. Ben basit bir görünüm hazırladım siz artık kendinize göre değiştirirsiniz .
ul li{list-style: none;}
ul.sayfalama li{float:left;}
ul.sayfalama li a{background:#403f3f;text-decoration:none;color:#c8c6c6;display:block;padding:7px;margin:7px;}
Son hali
<?php
require_once("baglan.php"); // Veritabanı bağlantı dosyası
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Anasayfa</title>
<style>
ul li{list-style: none;}
ul.sayfalama li{float:left;}
ul.sayfalama li a{background:#403f3f;text-decoration:none;color:#c8c6c6;display:block;padding:7px;margin:7px;}
</style>
</head>
<body>
<?php
$toplamVeri = $db->query("SELECT COUNT(*) FROM veriler")->fetchColumn();
$goster = 3;
$toplamSayfa = ceil($toplamVeri / $goster);
$sayfa = $_GET["s"];
if($sayfa < 1) $sayfa = 1;
if($sayfa > $toplamSayfa)
{
$sayfa = (int)$toplamSayfa;
}
$limit = ($sayfa - 1) * $goster;
$veriler = $db->prepare("SELECT * FROM veriler LIMIT :basla, :bitir");
$veriler->bindValue(":basla",$limit,PDO::PARAM_INT);
$veriler->bindValue(":bitir",$goster,PDO::PARAM_INT);
$veriler->execute();
$dizi = $veriler->fetchAll(PDO::FETCH_OBJ);
foreach ($dizi as $item) {
?>
<div class="icerik">
<h2><?php echo $item->baslik;?></h2>
<p><?php echo $item->icerik;?></p>
</div>
<hr>
<?php
}
?>
<ul class="sayfalama">
<?php
for($i = 1; $i<=$toplamSayfa;$i++)
{
?>
<li><a href="index.php?s=<?php echo $i;?>"><?php echo $i;?></a></li>
<?php
}
?>
</ul>
</body>
</html>
Yorum yapmak için lütfen giriş yapın veya üye olun