v2.5.2
Giriş yap

Php Pdo ile Sayfalama ve Arama işlemleri

codepacks
1,798 defa görüntülendi ve 5 kişi tarafından değerlendirildi

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

root3r
952 gün önce

Çok güzel bir paylaşım yapmışsınız umarım hatalarımı düzeltirim :)