Membuat Pagination

Jul 24, 2010 by MyPHPtutorials Level: Menengah Komentar Print

Tutorial Membuat Pagination menjelaskan cara membuat paging dengan php. Pagination berguna untuk menampilkan data yang banyak ke dalam beberapa halaman untuk mempercepat loading dari halaman web. Selain itu memberi kemudahan kepada pengguna dalam mencari data.

Untuk membuat pagination anda perlu mengetahui penggunaan SQL query limit.

Statement limit selalu diawali dengan statement select. Cara penggunaanya adalah seperti:

select * from nama_tabel limit 0,10 /*limit mulai_data_ke, banyak_data_yang_ditampilkan*/

query di atas akan menampilkan data sebanyak 10 data mulai dari data ke 0 (data ke 0-9). Contoh lain

select * from nama_tabel limit 5,10

menampilkan data sebanyak 10 data mulai dari data ke 5 (data ke 5-14). Langkah selanjutnya adalah mengintegrasikan cara penggunaan query limit dengan script php. Sebagai contoh, anda memiliki sebuah table dengan nama ‘data_siswa’, seperti berikut:

 

Nama Field Tipe Data Keterangan
nis varchar(20) primary key
nama varchar(50)  
kelas varchar(10)  
alamat text  

 

Kemudian anda memiliki sebuah file ‘tampil-data-siswa.php’ yang digunakan untuk menampilkan data yang ada di tabel ‘data_siswa’ sebanyak 10 data per halaman. Untuk itu anda menentukan link pagination seperti http://localhost/tampil-data-siswa.php?page=1 untuk menampilkan halaman pertama, http://localhost/tampil-data-siswa.php?page=2 untuk menampilkan halaman kedua, dan seterusnya.
File ‘tampil-data-siswa.php’ anda akan seperti di bawah:

 

<?php
$conn = mysql_connect("dbhost", "db_user", "db_password");
mysql_select_db("db_name");
//mencari banyak data yang ada dalam tabel
$sqlCount = "select count(nis) from data_siswa";
$rsCount = mysql_fetch_array(mysql_query($sqlCount));
$banyakData = $rsCount[0];
$page = isset($_GET['page']) ? $_GET['page'] : 1;
$limit = 10;
$mulai_dari = $limit * ($page - 1);
$sql_limit = "select * from data_siswa order by nama limit $mulai_dari, $limit";
$hasil = mysql_query($sql_limit);
//menampilkan data
echo '<table border="1">
 <tr>
 <td>NIS</td>
 <td>Nama</td>
 <td>Kelas</td>
 <td>Alamat</td>
 </tr>';
while($dataSiswa = mysql_fetch_array($hasil)){
 echo '<tr>';
 echo '<td>'.$dataSiswa['nis'].'</td>';
 echo '<td>'.$dataSiswa['nama'].'</td>';
 echo '<td>'.$dataSiswa['kelas'].'</td>';
 echo '<td>'.$dataSiswa['alamat'].'</td>';
 echo '</tr>';
}
echo '</table>';
//membuat pagination
$banyakHalaman = ceil($banyakData / $limit);
echo 'Halaman: ';
for($i = 1; $i <= $banyakHalaman; $i++){
 if($page != $i){
 echo '[<a href="tampil-data-siswa.php?page='.$i.'">'.$i.'</a>] ';
 }else{
 echo "[$i] ";
 }
}
?>

 

Di baris ke 6 sampai 8 untuk mencari berapa banyak data yang ada di tabel data_siswa. Di baris 10 - 14 adalah menentukan halaman mana yang diakses dan membuat sql query limit. Baris 16 - 32 digunakan untuk menampilkan data siswa. Yang terakhir baris 34 - 42 untuk membuat pagination. Di baris ini dilakukan perulangan sebanyak $banyakHalaman.

Pagination Untuk Pencarian

Pencarian data juga memerlukan pagination karena hasil pencarian bisa saja banyak sekali. Untuk itu gunakan kode di bawah:

<?php
$conn = mysql_connect("dbhost", "db_user", "db_password");
mysql_select_db("db_name");
//membentuk klausa where pencarian
$where = '';
if(isset($_GET['q']) && $_GET['q']){
 $where .= " where concat_ws(' ',nis,nama,kelas,alamat) like '%{$_GET['q']}%'";
}
//mencari banyak data yang ada dalam tabel
$sqlCount = "select count(nis) from data_siswa".$where;
$rsCount = mysql_fetch_array(mysql_query($sqlCount));
$banyakData = $rsCount[0];
$page = isset($_GET['page']) ? $_GET['page'] : 1;
$limit = 10;
$mulai_dari = $limit * ($page - 1);
$sql_limit = "select * from data_siswa {$where} order by nama limit $mulai_dari, $limit";
$hasil = mysql_query($sql_limit);
//form pencarian
?>
<form name="search" method="get" action="tampil-data-siswa.php">
 Search: <input type="text" name="q"/>
 <input type="submit" value="GO"/>
</form>
<?php
//menampilkan data
echo '<table border="1">
 <tr>
 <td>NIS</td>
 <td>Nama</td>
 <td>Kelas</td>
 <td>Alamat</td>
 </tr>';
while ($dataSiswa = mysql_fetch_array($hasil)) {
 echo '<tr>';
 echo '<td>' . $dataSiswa['nis'] . '</td>';
 echo '<td>' . $dataSiswa['nama'] . '</td>';
 echo '<td>' . $dataSiswa['kelas'] . '</td>';
 echo '<td>' . $dataSiswa['alamat'] . '</td>';
 echo '</tr>';
}
echo '</table>';
//membuat pagination
$banyakHalaman = ceil($banyakData / $limit);
echo 'Halaman: ';
for ($i = 1; $i <= $banyakHalaman; $i++) {
 if ($page != $i) {
 echo '[<a href="tampil-data-siswa.php?page=' . $i .($where ? '&q='.$_GET['q'] : ''). '">' . $i . '</a>] ';
 } else {
 echo "[$i] ";
 }
}
?>

Pada baris ke-5 sampai 8 ditambahkan pembentukan klausa sql where, jika pengguna melakukan pencarian. Baris 20-23 ditambahkan form search, dan baris ke-47 ditambahkan kata kunci pencarian sebelumnya.

Selamat Mencoba

Jika ada pertanyaan bisa ditanyakan di Sangkep


Silahkan login atau register sebelum meninggalkan komentar.