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?
SQL'deki LIMIT ve OFFSET komutlarını kullanabilmek için basit bir hesaplama yapmamız gerekir.
Formül: Offset = (Sayfa No - 1) * Limit
Aşağıdaki kod bloğu, veritabanından sadece ilgili sayfaya ait verileri çeken performanslı bir örnektir.
Kullanıcının sayfalar arasında gezinebilmesi için alt kısma butonlar eklemeliyiz.
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.
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->prepare("SELECT * FROM uyeler LIMIT :limit OFFSET :offset");
$sorgu->bindValue(':limit', (int) $limit, PDO::PARAM_INT);
$sorgu->bindValue(':offset', (int) $offset, PDO::PARAM_INT);
$sorgu->execute();
$veriler = $sorgu->fetchAll();
// Verileri listeleyelim
foreach ($veriler as $satir) {
echo "ID: " . $satir['id'] . " - Üye: " . $satir['kullanici_adi'] . "<br>";
}
} 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; ?>">« Ö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 »</a>
<?php endif; ?>
</div>
Sayfalama Performans Tablosu
| Özellik | Yöntem | Faydası |
|---|---|---|
| Veri Çekme | Sadece Limit/Offset kadar veri | Bellek (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.