Php Pdo ile Sayfalama ve Arama işlemleri
Php Pdo ile Sayfalama ve Arama ile ilgili
Forumda soru sormuştum soruma cevap bulamayınca
Bende yeni kod yazma kararı aldım ve sorunumu çözdüm
talep üzerine ihtiyacı olanlar için paylaşmaya karar verdim
sorunu tam manasıyla çözmek için ayrı bir dosyada kodladım
bunun nedenide sayfalama sınıfını
diyer sayfalama gerektirecek işlemler içinde'de kullanmaktı.
Pdo ile Arama ve Sayfalama işlemleri.
Sayfadaki Arama formu içerisinde aranıp tablo içerisinde listelenmesi
Sayfada verilerin listelenmesi için gerekli kodlar
$page = isset($_GET['page']) ? $_GET['page'] : 1;
$page_count = 8;// sayfada kaç tane veri görünsün
$first_record = ($page_count * $page) - $page_count;
$search = isset($_GET['search']) ? $_GET['search'] : "";
$search_condition = isset($_GET['search']) ? "%".$_GET['search']."%" : "%";
// tablo adı ve içerikleri kendinize göre düzenleyin filtre ekleyin
// id, baslik, aciklama, etiket gibi
$query = "SELECT id, baslik FROM yazilar WHERE baslik LIKE :search ORDER BY id DESC LIMIT :first_record, :page_count";
$stmt = $pdo->prepare($query);
$stmt->bindParam(":first_record", $first_record, PDO::PARAM_INT);
$stmt->bindParam(":page_count", $page_count, PDO::PARAM_INT);
$stmt->bindParam(":search", $search_condition);
$stmt->execute();
$num = $stmt->rowCount();
Sayfadaki arama formu örneği
<form class="search-bar position-relative mb-sm-0 mb-2" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="get">
<input type="text" class="form-control" name="search" value="<?php echo isset($_GET['search']) ? $_GET['search'] : ""; ?>" placeholder="Search...">
<span class="mdi mdi-magnify"></span>
</form>
listeletmek için tabloda kullanım örneği
<div class="table-responsive">
<table class="table table-bordered table-nowrap table-hover table-hover mb-0">
<thead>
<tr>
<th>id</th>
</tr>
</thead>
<?php
if($num > 0 ){
while ($record = $stmt->fetch(PDO::FETCH_ASSOC)){
extract($record); // $record['id'] yerine extract $id ile uzun kodlardan kurtuluyoruz
?>
<tbody>
<tr>
<td><?php echo $id; ?></td>
<td><?php echo $baslik; ?></td>
</tr>
<?php }} ?>
</tbody>
</table>
</div>
Son olarak sayfalama sınıfını çağırıyoruz
<?php require_once 'pagination.php'; ?>
Pdo Sayfalama sınıfı
pagination.php
//Taplo bilgilerini giriniz yazın
$query = "SELECT COUNT(*) as page_records FROM yazilar WHERE baslik LIKE :search";
$stmt = $pdo->prepare($query);
$stmt->bindParam(":search", $search_condition);
$stmt->execute();
$record = $stmt->fetch(PDO::FETCH_ASSOC);
$page_records = $record['page_records'];
//Verileri bu sayfada göster (isimlendirilebilir değişken $page_url sayfaadi.php)
$page_url="sayfa.php";
//Sayfalamada Bootstrap 5 kullandım
//Bootstrap 4 ilede uyumludur değiştirebilirsiniz
//değiştirilebilecek alanın örneği(<ul class='pagination'>)
echo "<ul class='pagination pagination-rounded justify-content-end my-2'>";
if($page>1){
//1 sayfa geri döner
$previous_page = $page - 1;
echo "<li class='page-item'><a class='page-link' href='{$page_url}?page={$previous_page}&search={$search}' aria-label='Previous'>
<span aria-hidden='true'>«</span><span class='visually-hidden'>Previous</span></a></li>";
}
$page_number = @ceil($page_records / $page_count);
$page_range = 2;
$start_page = ($page - $page_range) - 1;
$end_page = ($page + $page_range) + 1;
for($i = $start_page; $i < $end_page; $i++) {
if(($i > 0) && ($i <= $page_number)) {
if($i == $page) {
echo "<li class='page-item active'><a class='page-link' href='javascript::void();'>{$i}</a></li>";
}else{
echo "<li class='page-item'><a class='page-link' href='{$page_url}?page={$i}&search={$search}'>{$i}</a></li>";}
}
}
//1 sayfa ileri gider
if($page<$page_number){
$next_page = $page + 1;
echo "<li class='page-item'><a class='page-link' href='{$page_url}?page={$next_page}&search={$search}' aria-label='Next'>
<span aria-hidden='true'>»</span><span class='visually-hidden'>Next</span></a></li>";
}
echo "</ul>";
Yukardaki kodların tümü tek sayfa
$page = isset($_GET['page']) ? $_GET['page'] : 1;
$page_count = 8;
$first_record = ($page_count * $page) - $page_count;
$search = isset($_GET['search']) ? $_GET['search'] : "";
$search_condition = isset($_GET['search']) ? "%".$_GET['search']."%" : "%";
$query = "SELECT id,baslik FROM yazilar WHERE baslik LIKE :search ORDER BY id DESC LIMIT :first_record, :page_count";
$stmt = $pdo->prepare($query);
$stmt->bindParam(":first_record", $first_record, PDO::PARAM_INT);
$stmt->bindParam(":page_count", $page_count, PDO::PARAM_INT);
$stmt->bindParam(":search", $search_condition);
$stmt->execute();
$num = $stmt->rowCount();
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="get">
<input type="text" class="form-control" name="search" value="<?php echo isset($_GET['search']) ? $_GET['search'] : ""; ?>" placeholder="Search...">
</form>
<div class="table-responsive">
<table class="table table-bordered table-nowrap table-hover table-hover mb-0">
<thead>
<tr>
<th>id</th>
</tr>
</thead>
<?php
if($num > 0 ){
while ($record = $stmt->fetch(PDO::FETCH_ASSOC)){
extract($record);
?>
<tbody>
<tr>
<td><?php echo $id; ?></td>
<td><?php echo $baslik; ?></td>
</tr>
<?php }} ?>
</tbody>
</table>
</div>
<?php require_once 'pagination.php'; ?>
sayfalama işlemleri bu kadar karmaşık görünebilir ama biraz bilgiyle
bu sorun ortadan kalkar
sizde kod yazmaktan korkmayın yazdıkça gelişirsiniz
örneklerle dahada geliştirebilirsiniz
sağlıcakla kalın