Tutorial PHP Membuat Function Pencarian Dengan Paginasi

Fitur pencarian data dalam sebuah aplikasi sangatlah penting dalam rangka untuk memudahkan pengguna mencari data tertentu, jika jumlah data sudah banyak maka mencarinya satu - persatu akan sangat merepotkan, maka dari itu fitur pencarian data dalam sebuah aplikasi php sangatlah penting. Dalam tutorial kali ini saya akan membahas tentang bagaimana membuat function yang bisa digunakan untuk proses pencarian data.

Dalam contoh kasus kali ini saya akan membuat sebuah function yang bersifat reuseable atau maksudnya dapat digunakan kembali yang berarti function ini tidak spesifik dibuat hanya untuk satu operasi pencarian data pada tabel data tertentu saja melainkan juga nantinya bisa digunakan untuk operasi pencarian data lainnya

Dan berikut ini adalah Tutorial PHP Membuat Function Pencarian Dengan Paginasi

Sebelumnya saya jelaskan bahwa gaya penulisan kode disini menggunakan gaya OOP dengan ekstensi PDO atau kita sebut saja OOP PDO. 

Berikut ini adalah contoh function yang bisa digunakan untuk melakukan pencarian data dengan paginasi


<?php 
class Searchclass
{
	protected $con;

	public function __construct($link)
	{
		$this->con = $link;
	}
	protected function searchKeyword($table, $column, $keyword, $start='', $finish='')
	{
		try
		{
			$sql = "SELECT * FROM $table WHERE $column";
			(!empty($finish))
			?
			$sql.= " LIKE '%$keyword%' LIMIT $start, $finish"
			:
			$sql.= " LIKE '%$keyword%'";
			
			$stmt = $this->con->prepare($sql);
			$stmt->execute();
			return $stmt;
		}
		catch(PDOException $e)
		{
			echo $e->getMessage();
		}
	}
	public function limitSearch($table, $column, $keyword, $number, $name)
	{
		$finish = $number;
		$page = isset($_GET[$name])?(int)($_GET[$name]):1;
		$start = ($page>1)?($page*$finish)-$finish:0;
		$stmt = 
		[
			1=>Searchclass::searchKeyword($table, $column, $keyword),
			2=>Searchclass::searchKeyword($table, $column, $keyword, $start, $finish)
		];
		return $stmt;
	}
	public function limitSearch__paging($number, $url='', $name='', $total)
	{
		$nopage = isset($_GET[$name])?(int)$_GET[$name]:1;
		$total_page = ceil($total / $number);
		static::Previous($nopage, $url, $name);
		for($page=1; $page<=$total_page; $page++)
		{
			if(($page>=$nopage-2)&&($page<=$nopage+2)||($page==1)||($page==$total_page))
			{
				$class = ($page==$nopage)?'active':'page-item';
				echo '<li class="page-item"><a class="page-link '.$class.'" href="?'.$url.'&'.$name.'='.$page.'">'.$page.'</a></li>';
			}
		}
		static::nextPage($nopage, $url, $name, $total_page);
	}
	public function Previous($nopage, $url, $name)
	{
		echo '<nav aria-label="Page navigation example">
		  <ul class="pagination justify-content-center">';
		  echo ($nopage>1)?'
		    <li class="page-item">
		      <a class="page-link" href="'.$url.'&'.$name.'='.($nopage-1).'" aria-label="Previous">
		        <span aria-hidden="true">&laquo;</span>
		       
		      </a>
		    </li>':NULL;
	}
	public function nextPage($nopage, $url, $name, $total_page)
	{
		echo ($nopage>=$total_page)?NULL:'<li class="page-item">
		      <a class="page-link" href="'.$url.'&'.$name.'='.($nopage+1).'" aria-label="Next">
		        <span aria-hidden="true">&raquo;</span>
		      
		      </a>
		    </li>
		  </ul>
		</nav>';
	}


		
}

Selanjutnya untuk cara menggunakannya, kita perlu memasukan variabel koneksi kedalam fungsi. Misal koneksi database Anda ditulis seperti berikut :


<?php 
//file Database.php
class Database
{
	private $host = "localhost";
	private $user = "root";
	private $pass = "123456";
	private $db = "exam";
	public $link;
	public function __construct()
	{
		try
		{
			$this->link = new PDO("mysql:host=".$this->host.";dbname=".$this->db."",$this->user, $this->pass);
			$this->link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
			return $this->link;
		}
		catch(PDOException $e)
		{
			echo $e->getMessage();
		}

	}
}

Sehingga nanti fungsi akan dipanggil dengan contoh seperti berikut :


<?php 
require_once('Database.php');
require_once('Searchclass.php');
$link = new Database;
$obj = new Searchclass($link->link);
?>
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title>Test Librari</title>
	<link rel="stylesheet" type="text/css" href="bootstrap/css/bootstrap.min.css">
</head>
<body>
	<div class="container">
		<form class="d-flex" action="?" method="get">
			<input class="form-control" type="search" name="q" placeholder="Masukan kata kunci">
			<button type="submit" class="btn btn-outline-dark">Cari</button>
		</form>
	</div>
	<?php $keyword = isset($_GET['q'])?$_GET['q']:NULL; ?>
	<div class="container mt-4">
		<table class="table table-bordered">
			<thead>
				<tr>
					<th>Nama lengkap</th>
					<th>Usia</th>
					<th>Jumlah Anak</th>
					<th>Status</th>
				</tr>
			</thead>
			<tbody>
				<?php 
					if(!empty($keyword)):
						$d = $obj->limitSearch('janda','nama', $keyword, 10, 'halaman');
						if($d[2]->rowCount()>0)
						{
							while($row=$d[2]->fetch(PDO::FETCH_ASSOC))
							{
				?>
								<tr>
									<td><?=$row['nama']?></td>
									<td><?=$row['usia']?></td>
									<td><?=$row['jumlah_anak']?></td>
									<td><?=$row['status']?></td>
								</tr>
				<?php 
							}
						}else{

							echo '<tr><td colspan="4">Data tidak ditemukan</td></tr>';
						}


				?>



			
		</table>
		<?=$obj->limitSearch__paging(10, "?q=$keyword", 'halaman', $d[1]->rowCount())?>
	<?php endif; ?>

	</div>
</body>
</html>

Dengan contoh diatas diharapkan anda bisa membuat fungsi pencarian data dengan paginasi, cara ini tentu tidak sepesifik hanya untuk operasi tertentu melainkan juga untuk operasi pencarian data jenis lainnya



0 Response to "Tutorial PHP Membuat Function Pencarian Dengan Paginasi"

Post a Comment

Komentar yang Anda kirim akan terlebih dahulu di moderasi oleh Admin