Membuat Paging Halaman Sederhana Dengan PHP

Bagi programmer pasti sering membuat aplikasi yang menampilkan data. Nah, apabila data yang mau ditampilkan sedikit, itu tidak masalah, tapi bagaimana jika data  yang mau ditampilkan jumlahnya puluhan bahkan ratusan maka pengguna akan menghadapi scrool window yang sangat panjang (sampe cape scrool-nya :P)  dan loading-nya  akan lama. Nah, untuk mengatasi hal ini digunakan satu sistem yang sudah banyak dikenal yaitu Sistem Paging. Sistem Paging adalah sistem dimana menampilkan data-data yang ada secara bertahap, jadi data tidak ditampilkan semua, data dibagi menjadi beberapa halaman dengan masing-masing halaman hanya memiliki beberapa data saja. Kemudian jika halaman tujuan diklik baru data pada halaman tersebut ditampilkan, jadi proses loading yang terjadi tidak lama.
Sistem Paging ini saya jelaskan lebih dikhususkan untuk penggunaan pada Website.
Sekarang saya akan menjelaskan dulu logika dasar dari sistem Paging. Perhatikan table di bawah ini :





Sebagai  contoh, kita memiliki 22 record daftar mahasiswa, kemudian ingin kita tampilkan dengan dibagi menjadi beberapa halaman dengan maksimum 5 record per halaman.
Nah, pertama kita cari dulu jumlah halaman yang akan terbentuk :

Jumlah Halaman = Total Record / Maksimum Record tiap halaman
Jumlah Halaman = 22 / 5 = 4.4 Halaman



Ibarat kan saja halaman itu halaman pada buku novel  ukuran kertas A4,dimana ada sisa sedikit cerita yang tidak muat lagi untuk ditampilkan di halaman terakhir, mau tak mau kertas musti ditambah satu lagi guna menempatkan sisa cerita yang ada (walaupun hanya menggunakan separo dari ukuran kertas saja. Maka dari itu setiap perhitungan Jumlah Halaman kita akan bulatkan ke atas.
Jumlah Halaman = 22 / 5 = 4.4 = 5 Halaman



Untuk pengambilan data dari database (mysql), kita ambil dari record pertama dengan kelipatan 5 untuk halaman selanjutnya,
Coba perhatikan tabel di atas,  : untuk halaman 1, kita hanya mengambil data dari record ke-0 hingga ke  record ke-4, untuk halaman 2, kita hanya mengambil data dari record ke-5 hingga ke  record ke-9, dst (record pertama dalam mysql dimulai dari angka 0) .
Jadi rumus untuk mendapatkan start record adalah :
(no halaman saat ini - 1) * maximum record per halaman


Sebagai contoh untuk kasus diatas (dengan maximum record per halaman = 5) :
Start record untuk halaman 1 : (1 - 1) *  5 =  0
Start record untuk halaman 2 : (2 - 1) *  5 =  5
Start record untuk halaman 3 : (3 - 1) *  5 =  10
Start record untuk halaman 4 : (4 - 1) *  5 =  15
Start record untuk halaman 5 : (5 - 1) *  5 =  20


Nah,berdasarkan dari logika yang saya jelaskan di atas , berikut contoh dalam bentuk coding PHP :


<?
    function generate_paging_text($curPage,$totalRec,$maxRec){
        $totalPage=ceil($totalRec/$maxRec);
        $str="";
       
        /*prev button*/
        if($curPage>1){            
            $prevPage = $curPage-1;
            $str.=" ".makeLink("prev","?p=".$prevPage)." ";           
        }
       
        /*generate page number*/
        for($i=1;$i<=$totalPage;$i++){
            if($i==$curPage){
                $bold=true;
            }else{
                $bold=false;
            }
            $str.=" ".makeLink($i,"?p=".$i,$bold)." ";
        }
       
        /*next button*/

        if($curPage<$totalPage){            
            $nextPage=$curPage+1;
            $str.=" ".makeLink("next","?p=".$nextPage)." ";           
        }
       
        return $str;

       
    }
    function makeLink($str,$url,$bold="false"){
        if($bold){
            $str="<b>".$str."</b>";
        }
        return '<a href="'.$url.'">'.$str.'</a>';

    }
   
       
   
//Connect to database   
    $con = mysql_connect("localhost","root","");
    mysql_select_db("contoh",$con);
   
    $curPage=($_GET['p']==null)?1:$_GET['p'];
    $maxRec=5;// maximum record per page
   

    /* GET DATA FROM MYSQL */   

    $curRec = ($curPage-1)*$maxRec; //TO GET START RECORD
    $sql = "select * from customer order by name asc limit ".$curRec.",".$maxRec;
    echo "Query untuk Halaman  ".$curPage.": <b>".$sql."</b><Br><BR>";
    $rs=mysql_query($sql,$con);
    while ($row = mysql_fetch_assoc($rs)) {
        echo "Nama : ".$row['name']." , Umur : ".$row['age']."<br>";
    }
   
    // get total Record from your table in database
    $total_record=mysql_query("select count(customer_id) as tot from customer",$con);   
    $total_record=mysql_fetch_row($total_record);
    $total_record=$total_record[0];
       
   
    /* PRINT PAGING LINK */

    echo "<br>";
    echo generate_paging_text($curPage,$total_record,$maxRec);
?>


Saya akan jelaskan perbagian.
function generate_paging_text($curPage,$totalRec,$maxRec)
Disini, untuk mengehasikan text Paging saya buat dalam bentuk function , jadi bisa dipakai dengan mudah setiap saat. Paramater yang diterima oleh function paging ini ada 3 yaitu :
  1. $curPage = digunakan untuk memberitaukan function halaman no berapa yang sedang aktif.
  2. $totalRec =berisi total record yang berada di dalam database.
  3. $maxRec= berisi informasi maksimum record yang boleh ditampilkan tiap halaman.

function makeLink($str,$url,$bold="false")
Function ini digunakan untuk menggenerate paging link yang mana ada deteksi kalau butuh di-tebalkan tulisannya maka akan ditambah dengan tag "<b>".

Kemudian bagian pengambilan datanya, logika perhitungannya dibuat sesuai logika yang sudah dijelaskan di atas.  Untuk membatasi record yang mau diambil dari database, dapat menambahkan "limit startRecord,maxRecord" di paling belakang sql pengambilan data.
  $startRec= ($curPage-1)*$maxRec; //TO GET START RECORD
  $sql = "select * from customer order by name asc limit ".$startRec.",".$maxRec;
  $rs=mysql_query($sql,$con);
Ini saya sertakan file php-nya supaya lebih jelas
contoh paging

Artikel Lainnya