• Translate

4/30/2014

Paging dengan PHP dan MySQL

Tutorial PHP |

Advertisement

Menampilkan data dalam jumlah banyak dalam satu halaman bukanlah pilihan yang baik. Selain membuat load database menjadi besar, dari sisi user juga tentu tidak nyaman untuk selalu men-scroll halaman hingga ratusan bahkan ribuan baris data. Untuk itu diperlukan pemecahan data menjadi beberapa halaman dengan jumlah data yang terbatas setiap halamannya (misalkan 20 – 50 data per halaman).
Membuat paging dengan PHP tidaklah sulit. Silahkan ikuti tutorial berikut ini.

 Materi Dasar

pagenavi
Tentu kalian sudah tahu bahwa untuk menampilkan data dari database adalah dengan query SELECT * FROM nama_tabel. Query tersebut akan menampilkan seluruh data dari tabel.
Untuk membatasi jumlah data yang ditampilkan, tambahkan perintah LIMIT offset, row_count sehingga untuk menampilkan data sebanyak 50 row, query menjadi seperti berikut.
 SELECT * FROM nama_tabel LIMIT 0, 50;
Keterangan :
  • offset adalah berapa banyak data yang akan dilewati (skip). Jika offset 0, maka data ditampilkan dari baris pertama. Jika offset 10, maka data ditampilkan dari baris ke-11.
  • row_count adalah jumlah data yang akan ditampilkan.
Perhatikan lagi query diatas, LIMIT 0, 50 berarti menampilkan data sebanyak 50 baris dari baris pertama. Jika ingin menampilkan data sebanyak 50 data dimulai dari baris ke 51, maka query nya adalah LIMIT 50, 50.


Fungsi getTableData()

Buat file baru. Ketikkan kode berikut dan simpan dengan nama pagination.php.
function getTableData($tableName, $page = 1, $limit = 20)
{
    $dataTable = array();
    $startRow = ($page - 1) * $limit;
    $query = mysql_query('SELECT * FROM `'.$tableName.'` LIMIT '.$startRow.', '.$limit);
    while ($data = mysql_fetch_assoc($query))
        array_push($dataTable, $data);
    return $dataTable;
}
Perhatikan variabel $query, disini kita menerapkan query sql dengan LIMIT. Parameter offset dan row_count diambil dari variabel $limit dan $startRow. Variabel $startRow adalah hasil perhitungan untuk mendapatkan nilai offset sehingga data yang ditampilkan sesuai dengan halaman yang dibuka.

Fungsi showPagination()

Tambahkan kode berikut pada file pagination.php.
function showPagination($tableName, $limit = 20)
{
    $countTotalRow = mysql_query('SELECT COUNT(*) AS total FROM `'.$tableName.'`');
    $queryResult = mysql_fetch_assoc($countTotalRow);
    $totalRow = $queryResult['total'];
    $totalPage = ceil($totalRow / $limit);
    $page = 1;
    while ($page <= $totalPage)
    {
        echo '<a href="?page='.$page.'&perPage='.$limit.'">'.$page.'</a>';
        if ($page < $totalPage)
            echo " | ";
        $page++;
    }
}
Untuk bisa membuat paging, maka kita harus mengetahui jumlah total data yang ada terlebih dahulu, kemudian total data tersebut dibagi dengan jumlah data yang ditampilkan dalam satu halaman. Dengan demikian, kita mendapatkan jumlah paging yang dapat dibuat. Perhatikan variabel $totalPage.

Jika kita memiliki data sebanyak 13 baris dan akan ditampilkan sebanyak 5 data per halaman,  maka paging yang dibuat adalah 3, sehingga data pada baris ke 11, 12, dan 13 dapat ditampilkan. Untuk memenuhi kebutuhan ini, maka digunakan fungsi ceil() untuk membulatkan pembagian ke atas karena 13 jika dibagi 3 tidaklah bulat 3 dan juga bukan 4.

Setelah jumlah total paging yang akan dibuat diketahui, sekarang kita tinggal membuat tombol sebanyak jumlah halaman (total paging) yang didapat dengan menggunakan pengulangan while ($page <= $totalPage).

Menampilkan Data

Sekarang kita sudah memiliki dua fungsi untuk menampilkan data dan untuk membuat tombol paginasi. Sekarang kita gunakan kedua fungsi tersebut.
Buat file baru dan simpan dengan nama data.php. Kemudian buatlah koneksi ke database. Silahkan gunakan database apa saja yang pernah dibuat, yang penting ada tabel yang memiliki data yang cukup untuk contoh (misal memiliki lebih dari 20 baris data).

<?php
mysql_connect('localhost', 'root', '');
mysql_select_db('test');
include_once('pagination.php');
// untuk mengetahui halaman keberapa yang sedang dibuka
// juga untuk men-set nilai default ke halaman 1 jika tidak ada
// data $_GET['page'] yang dikirimkan
$page = 1;
if (isset($_GET['page']) && !empty($_GET['page']))
    $page = (int)$_GET['page'];
// untuk mengetahui berapa banyak data yang akan ditampilkan
// juga untuk men-set nilai default menjadi 5 jika tidak ada
// data $_GET['perPage'] yang dikirimkan
$dataPerPage = 5;
if (isset($_GET['perPage']) && !empty($_GET['perPage']))
    $dataPerPage = (int)$_GET['perPage'];
// tabel yang akan diambil datanya
$table = 'user';
// ambil data
$dataTable = getTableData($table, $page, $dataPerPage);
// menampilkan tombol paginasi
showPagination($table, $dataPerPage);
?>
<table>
    <thead>
        <tr>
            <th>No.</th>
            <th>Nama</th>
        </tr>
    </thead>
    <tbody>
    <?php
    foreach ($dataTable as $i => $data)
    {
        $no = ($i + 1) + (($page - 1) * $dataPerPage);
        echo '<tr>
                <td>'.$no.'</td>
                <td>'.$data['nama'].'</td>
            </tr>';
    }
    ?>
    </tbody>
</table>
Penjelasan dapat dibaca pada baris-baris komentar kode di atas. Silahkan dipahami.

Kesimpulan

Membuat paginasi tidaklah sulit. Dengan membuat paginasi menjadi fungsi, kita dapat dengan mudah menggunakan fitur paginasi tanpa harus menuliskan kode yang sama berulang kali pada halaman-halaman yang membutuhkan.

Semoga bermamfaat...

Disclaimer: Images, Content of articles or videos that exist on the web sometimes come from various sources of other media. Copyright is fully owned by the source. If there is a problem with this matter, you can contact us here.
Disqus
Blogger
How to style text in Disqus comments Top Disqus Commentators
  • To write a bold letter please use <strong></strong> or <b></b>.
  • To write a italic letter please use <em></em> or <i></i>.
  • To write a underline letter please use <u></u>.
  • To write a strikethrought letter please use <strike></strike>.
  • To write HTML code, please use <code></code> or <pre></pre> or <pre><code></code></pre>, and please parse the code in the parser box below.
Show Parser Box

1 comment Add Comment

Nice blog...Very useful information is providing by ur blog. Great beginning php tutorials Very clear and helpful for beginners.

Reply

Comments not appropriate topic will sign SPAM.