Sayfalama (Pagination): Binlerce Veriyi Sayfalara Bölmek

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

irfo

Moderatör
Katılım
7 Ocak 2026
Mesajlar
290
Tepkime puanı
2
Puanları
18
Büyük veri setlerini kullanıcıya sunarken en verimli yol sayfalamadır. Google arama sonuçlarından forum konu listelerine kadar her yerde bu yapıyı görürüz. Sayfalama mantığı temel olarak iki veriye dayanır: Kaçıncı sayfadayız? ve Sayfa başına kaç kayıt gösterilecek?

1. Sayfalama Mantığının Matematiksel Formülü​


SQL'deki LIMIT ve OFFSET komutlarını kullanabilmek için basit bir hesaplama yapmamız gerekir.


  • [] Limit: Sayfa başına gösterilecek kayıt sayısı.
    [] Offset: Atlanacak kayıt sayısı. (Örn: 2. sayfadaysanız, ilk sayfadaki kayıtları atlamanız gerekir.)

Formül: Offset = (Sayfa No - 1) * Limit

2. PHP ile Sayfalama Kod Yapısı​


Aşağıdaki kod bloğu, veritabanından sadece ilgili sayfaya ait verileri çeken performanslı bir örnektir.

PHP:
<?php
require_once 'Database.php';
$db = Database::getInstance()->getConnection();

// 1. Sayfa ayarları
$limit = 10; // Sayfa başına 10 kayıt
$sayfa = $_GET['s'] ?? 1; // URL'den gelen sayfa no
if ($sayfa < 1) $sayfa = 1;
$offset = ($sayfa - 1) * $limit;

try {
// 2. Toplam kayıt sayısını bulalım (Sayfa sayısını hesaplamak için)
$toplamKayit = $db->query("SELECT COUNT(*) FROM uyeler")->fetchColumn();
$toplamSayfa = ceil($toplamKayit / $limit);

// 3. Mevcut sayfanın verilerini çekelim
$sorgu = $db-&gt;prepare(&quot;SELECT * FROM uyeler LIMIT :limit OFFSET :offset&quot;);
$sorgu-&gt;bindValue(&#39;:limit&#39;, (int) $limit, PDO::PARAM_INT);
$sorgu-&gt;bindValue(&#39;:offset&#39;, (int) $offset, PDO::PARAM_INT);
$sorgu-&gt;execute();
$veriler = $sorgu-&gt;fetchAll();

// Verileri listeleyelim
foreach ($veriler as $satir) {
    echo &quot;ID: &quot; . $satir[&#39;id&#39;] . &quot; - Üye: &quot; . $satir[&#39;kullanici_adi&#39;] . &quot;<br>&quot;;
}

} catch (PDOException $e) {
echo "Hata: " . $e->getMessage();
}
?>

3. Sayfa Numaralarını Yazdırma (Navigasyon)​


Kullanıcının sayfalar arasında gezinebilmesi için alt kısma butonlar eklemeliyiz.

PHP:
<div class="pagination">
<?php if($sayfa > 1): ?>
<a href="liste.php?s=<?php echo $sayfa - 1; ?>">&laquo; Önceki</a>
<?php endif; ?>

<?php for($i = 1; $i <= $toplamSayfa; $i++): ?>
    <a href="liste.php?s=<?php echo $i; ?>" <?php echo ($i == $sayfa) ? 'style="font-weight:bold; color:red;"' : ''; ?>>
        <?php echo $i; ?>
    </a>
<?php endfor; ?>

<?php if($sayfa < $toplamSayfa): ?>
    <a href="liste.php?s=<?php echo $sayfa + 1; ?>">Sonraki &raquo;</a>
<?php endif; ?>

</div>

Sayfalama Performans Tablosu​


ÖzellikYöntemFaydası
Veri ÇekmeSadece Limit/Offset kadar veriBellek (RAM) kullanımını minimize eder.
Sıralamaİndeksli bir sütun (ID gibi)Sorgunun milisaniyeler içinde bitmesini sağlar.
Navigasyonİlk-Son Sayfa ButonlarıKullanıcının veride kaybolmasını önler.

4. Dikkat Edilmesi Gerekenler​



  • [] SQL Injection: Sayfa numarasını URL'den alırken mutlaka tam sayı (int) kontrolü yapın.
    [] Geçersiz Sayfalar: Eğer kullanıcı s=999 gibi olmayan bir sayfaya giderse, boş sonuç dönmek yerine son sayfaya yönlendirebilirsiniz.
  • Büyük Veri (SEO): Çok fazla sayfa varsa (örneğin 1000 sayfa), tüm numaraları yazdırmak yerine "1 2 3 ... 99 100" şeklinde kısaltma kullanın.

Sonuç​


Sayfalama, profesyonel bir PHP geliştiricisinin alet çantasındaki en önemli araçlardan biridir. Sadece kodun çalışması değil, aynı zamanda veritabanı indekslerini kullanarak bu işlemi en hızlı şekilde yapmak 2026 yılındaki projelerin başarısını belirler.
 
Geri
Üst