Rosihan Ari`s Blog » Ide Membuat Advanced Paging dengan PHP » Print

http://blog.rosihanari.net/ide-membuat-advance-paging-dengan-php/print/

- Rosihan Ari`s Blog - http://blog.rosihanari.net -

Ide Membuat Advanced Paging dengan PHP
Posted By rosihanari On April 30, 2009 @ 7:18 pm In PHP,Programming,SQL | 136 Comments

Paging merupakan teknik menampilkan data dengan cara membaginya ke beberapa halaman. Teknik ini diberikan untuk mengurangi scrolling window apabila data yang disajikan terlalu banyak, sehingga akan menimbulkan kejemuan orang yang melihat dan juga akan menghasilkan page load time yang besar karena ukuran filenya besar (apabila data disajikan dalam satu halaman saja). Untuk keperluan navigasi data biasanya disajikan dengan link berupa nomor halaman atau kadang berbentuk Previous dan Next. Pada tutorial ini akan dipaparkan bagaimana ide membuat advance paging ini dilakukan. Advance paging adalah paging yang navigasinya berbentuk 1 2 3 4 … 20 Next >> Contoh tampilan di atas diasumsikan terdapat 20 halaman paging dan halaman yang sedang aktif adalah halaman 1. Bila yang aktif halaman 10, maka tampilan navigasinya adalah: << Prev 1 ... 7 8 9 10 11 12 13 … 20 Next >> Sedangkan bila yang aktif adalah halaman terakhir (20) maka tampilan navigasinya adalah << Prev 1 .. 17 18 19 20 Dalam contoh ini kasus advance paging ini akan diterapkan pada data guestbook atau buku tamu. Istilah ‘advance paging’ ini adalah istilah saya saja sih Mau tau bagaimana ide dan cara membuatnya? simak baik-baik artikel ini. Artikel ini merupakan request dari mas Sadeli (salah satu member saya
[1]

)

Pertama kita siapkan terlebih dahulu tabel untuk menyimpan datanya: CREATE TABLE guestbook ( id int(11) auto_increment, nama varchar(20), email varchar(20), tanggal date, komentar text, PRIMARY KEY (id) ) Selanjutnya kita buat skenario dari paging ini. Misalkan kita akan membuat paging dengan jumlah data yang ditampilkan per halaman adalah sejumlah 5 buah. Sehingga kita perlu membuat variabel untuk menyimpan jumlah data yang akan ditampilkan per halaman. show.php <?php // koneksi ke mysql mysql_connect('namahost', 'dbuser', 'dbpassword'); mysql_select_db(data);

1 of 10

9/25/2010 7:58 PM

php maka otomatis menuju ke halaman 1. maka kita tambahkan perintah <?php mysql_connect('namahost'. 1. dst. maka URL nya http://namaserver/show. . // apabila $_GET['page'] sudah didefinisikan. ?> Kita lanjutkan skenarionya. maka perintahnya 2 of 10 9/25/2010 7:58 PM . misalkan terdapat 15 data dalam tabel guestbook dimana kita ingin menyajikan pada setiap halaman adalah 5 data. 8. data yang ditampilkan adalah 5. Dari skenario di atas tampak bahwa bila parameter ?page=. bahwa data dalam database memiliki urutan seperti halnya array. 3 dan 4. Query SQL yang digunakan adalah SELECT * FROM guestbook LIMIT offset. . Untuk script paging ini. Trus. nomor halamannya 1. if(isset($_GET['page'])) { $noPage = $_GET['page'].net/ide-membuat-advance-paging-dengan-php/print/ // jumlah data yang akan ditampilkan per halaman $dataPerPage = 5. 6. 13. Untuk halaman pertama. 'dbpassword'). 7. . dalam teknik paging perlu adanya pengaturan posisi awal data atau lebih dikenal dengan istilah offset. Nah… perhatikan bahwa untuk halaman 1. dan 9. mysql_select_db('dbname'). Sedangkan halaman kedua. Untuk mewujudkan hal ini. belum diberikan pada URL maka secara otomatis menuju ke nomor halaman 1. pastilah data yang ditampilkan adalah data ke – 0. Dengan demikian total terdapat 3 halaman dalam pagingnya. jumlahData.php?page=2.. data ke 10. // sedangkan apabila belum. 12. Serta halaman ketiga. . Perlu Anda tahu. // jumlah data yang akan ditampilkan per halaman $dataPerPage = 5. Untuk menuju ke halaman 2.. apa kaitannya offset dengan paging? Sabar… perhatikan dulu contoh berikut ini Sebagai contoh. Sehingga untuk memunculkan data guestbook pada halaman pertama. URL nya http://namaserver/show. Lantas apa gunanya offset tersebut? Offset nantinya akan digunakan pada query SQL untuk memunculkan data pada setiap halaman. Data pada baris pertama hasil query SQL disebut data pada posisi ke-0. } else $noPage = 1. Sedangkan bila terdapat parameter ?page=… maka nomor halamannya menyesuaikan nilai pada parameter ?page tersebut.. 14. 11. . data pada baris kedua disebut data pada posisi ke-1.rosihanari. Offset digunakan untuk mengatur posisi awal data yang akan ditampilkan perhalaman. data awal yang ditampilkan adalah data pada urutan ke-0. 'dbuser'. gunakan nomor halaman tersebut. halaman 2 data awalnya adalah data pada urutan ke-5 dan halaman 3 data pada urutan ke 10. bila dibuka pertama kali dengan URL http://namaserver/show. ?> Selanjutnya.php?page=3.Rosihan Ari`s Blog » Ide Membuat Advanced Paging dengan PHP » Print http://blog. 2. Sedangkan untuk menuju ke halaman 3. dan seterusnya.

1) * $dataPerPage. if(isset($_GET['page'])) { $noPage = $_GET['page']. // query SQL untuk menampilkan data perhalaman sesuai offset $query = "SELECT * FROM guestbook LIMIT $offset. Untuk memunculkan data pada halaman kedua.. 5.$data['nama']. maka nilai offset = (1 – 1) * 5 = 0. Bener kan? OK. kita bisa tambahkan scriptnya untuk mencari offset dan query SQL nya."</td><td>". maka hubungan antara offset.Rosihan Ari`s Blog » Ide Membuat Advanced Paging dengan PHP » Print http://blog. // jumlah data yang akan ditampilkan per halaman $dataPerPage = 5. jumlah data yang ingin ditampilkan per halaman dan nomor halamannya adalah: offset = (no halaman – 1) * jumlah data per halaman. } 3 of 10 9/25/2010 7:58 PM . 3x kita cek saja. dah paham tentang offset. dan seterusnya. mysql_select_db('dbname'). Untuk halaman 1."</td></tr>". Untuk halaman 2. // perhitungan offset $offset = ($noPage . gunakan nomor halaman tersebut. so. // sedangkan apabila belum.$data['tanggal']. perintahnya: SELECT * FROM guestbook LIMIT 5. } else $noPage = 1. dah paham. echo "<tr><td>Nama</td><td>Email</td><td>Tanggal</td><td>Komentar</td></tr>".rosihanari. perintahnya: SELECT * FROM guestbook LIMIT 10."</td><td>". while($data = mysql_fetch_array($result)) { echo "<tr><td>". 'dbuser'. 5.net/ide-membuat-advance-paging-dengan-php/print/ SELECT * FROM guestbook LIMIT 0. deh. 'dbpassword').."</td><td>". // apabila $_GET['page'] sudah didefinisikan.$data['email']. $dataPerPage". Lho kok bisa? he.. deh. OK. // menampilkan data echo "<table border='1'>". 5. dan untuk memunculkan data pada halaman ketiga. $result = mysql_query($query) or die('Error')...$data['komentar']. <?php mysql_connect('namahost'. nomor halamannya 1. trus yang jadi masalah adalah bagaimana menentukan offset pada setiap halamannya? Bila kita lihat patternnya. nilai $offset = (2 – 1) * 5 = 5 dan halaman ketiga $offset = (3 – 1) * 5 = 10.

Sehingga dari pattern tersebut formula untuk menghitung jumlah halaman adalah jumlah halaman = ceil(jumlah data / data per halaman).1) * $dataPerPage. gunakan nomor halaman tersebut. } else $noPage = 1. mysql_select_db('dbname'). benar ada 3. 'dbpassword'). $dataPerPage". kita cari patternnya terlebih dahulu. dan sekarang kita bisa tambahkan proses menghitung jumlah data dan jumlah halaman pada scriptnya.Rosihan Ari`s Blog » Ide Membuat Advanced Paging dengan PHP » Print http://blog. ceil(3.. // apabila $_GET['page'] sudah didefinisikan. // query SQL untuk menampilkan data perhalaman sesuai offset $query = "SELECT * FROM guestbook LIMIT $offset.. Misalkan terdapat 15 data. SELECT COUNT(*) FROM guestbook.7) = 4. Misal ceil(3.net/ide-membuat-advance-paging-dengan-php/print/ echo "</table>".2) = 4. ceil() adalah function yang digunakan untuk membulatkan ke atas suatu bilangan. // jumlah data yang akan ditampilkan per halaman $dataPerPage = 5. Trus… yang jadi masalah adalah bagaimana mendapatkan jumlah datanya? Nah… untuk mendapatkan jumlah data keseluruhan yang ada kita gunakan query SQL. Untuk menghitung total jumlah halaman. ?> Nah… masalah berikutnya adalah bagaimana menentukan total jumlah halamannya? Hal ini penting karena nantinya akan ditampilkan sebagai link navigasi pagingnya. echo "<tr><td>Nama</td><td>Email</td><td>Tanggal</td><td>Komentar</td></tr>". // menampilkan data echo "<table border='1'>". total ada berapa halaman? OK. maka total ada berapa halaman yang dibutuhkan? OK. if(isset($_GET['page'])) { $noPage = $_GET['page']. <?php mysql_connect('namahost'.rosihanari. Trus… kalo ada 31 data dan kita ingin menyajikan data sejumlah 5 per halaman. benar ada 7 (untuk halaman ke-7 hanya tampil 1 buah data). nomor halamannya 1. . // perhitungan offset $offset = ($noPage . 'dbuser'. dan kita ingin menyajikan data sejumlah 5 per halaman. $result = mysql_query($query). // sedangkan apabila belum. while($data = mysql_fetch_array($result)) { 4 of 10 9/25/2010 7:58 PM . . OK… I know.

"'>&lt. caranya mudah.$data['komentar']. terdapat link << prev. // query SQL untuk menampilkan data perhalaman sesuai offset $query = "SELECT * FROM guestbook LIMIT $offset. // perhitungan offset $offset = ($noPage .. benar yaitu menuju ke nomor halaman sebelumnya ($noPage – 1). sebelum memunculkan link nomor halaman. $hasil = mysql_query($query). gunakan nomor halaman tersebut.net/ide-membuat-advance-paging-dengan-php/print/ echo "<tr><td>". Prev</a>". Trus."</td><td>".. // mencari jumlah semua data dalam tabel guestbook $query = "SELECT COUNT(*) AS jumData FROM guestbook". // sedangkan apabila belum.Rosihan Ari`s Blog » Ide Membuat Advanced Paging dengan PHP » Print http://blog. } else $noPage = 1. "<a href='". // jumlah data yang akan ditampilkan per halaman $dataPerPage = 5. tepat sekali yaitu ketika nomor halaman yang sedang aktif (sedang dibuka) setelah halaman pertama atau $noPage > 1. Untuk memunculkan nomor halamannya. menuju ke nomor halaman berapakah link tersebut? yap. Dengan demikian kita bisa tambahkan perintah berikut ini pada script if ($noPage > 1) echo sehingga menjadi <?php mysql_connect('namahost'. Kita hanya menggunakan looping saja. $jumData = $data['jumData']. 5 of 10 9/25/2010 7:58 PM . .rosihanari. ."</td></tr>". // menentukan jumlah halaman yang muncul berdasarkan jumlah semua data $jumPage = ceil($jumData/$dataPerPage).$_SERVER['PHP_SELF']. 'dbuser'. nomor halamannya 1. 'dbpassword')."</td><td>".$data['nama']. // apabila $_GET['page'] sudah didefinisikan.$data['tanggal']."?page=".($noPage-1). if(isset($_GET['page'])) { $noPage = $_GET['page']."</td><td>".. $dataPerPage".. tunggu dulu pada desain advance paging di atas. mysql_select_db('dbname').$data['email']. Tapi eit.1) * $dataPerPage. Kapan link ini akan muncul? ya.. } echo "</table>".&lt. $data = mysql_fetch_array($hasil). ?> Nah… sekarang tinggal bagaimana cara memunculkan link berisi nomor halaman yang menuju ke setiap halamannya.

$data['tanggal']."</td><td>". // menentukan jumlah halaman yang muncul berdasarkan jumlah semua data $jumPage = ceil($jumData/$dataPerPage).1)) && ($page == $jumPage)) echo ". // menampilkan link previous if ($noPage > 1) echo .3) && ($page <= $noPage + 3)) || ($page == 1) || ($page == $jumPage)) { if (($showPage == 1) && ($page != 2)) echo ".. . = mysql_query($query). } } Konsep loopingnya sederhana. // mencari jumlah semua data dalam tabel guestbook $query $hasil $data = "SELECT COUNT(*) AS jumData FROM guestbook". while($data = mysql_fetch_array($result)) { echo "<tr><td>". else echo " <a href='". if ($page == $noPage) echo " <b>"..$data['nama'].$_SERVER['PHP_SELF']. // menampilkan data echo "<table border='1'>". } echo "</table>". $page <= $jumPage."</a> ".rosihanari.Rosihan Ari`s Blog » Ide Membuat Advanced Paging dengan PHP » Print http://blog. Prev</a>"... Namun harap dicatat di sini bahwa karena tidak semua nomor halaman ditampilkan sesuai desain sebelumnya maka kita perlu berikan syarat."'>".$page.net/ide-membuat-advance-paging-dengan-php/print/ $result = mysql_query($query) or die('Error')."."'>&lt.&lt."</b> ". echo "<tr><td>Nama</td><td>Email</td><td>Tanggal</td><td>Komentar</td></tr>". yaitu menuliskan link nomor halaman mulai dari 1 s/d jumlah halamannya.$data['email']. Adapun perintah-perintahnya adalah seperti di bawah ini."?page=". 6 of 10 9/25/2010 7:58 PM ."</td><td>". $page++) { if ((($page >= $noPage .3) && ($page <= $noPage + 3)) || ($page == 1) || ($page == $jumPage)) { . } "<a href='".$page. $jumData = $data['jumData'].$_SERVER['PHP_SELF']. for($page = 1."?page=".$data['komentar']."</td></tr>". ?> Berikutnya kita akan tampilkan link nomor-nomor halamannya menggunakan looping.($noPage-1). $showPage = $page.$page. . Maksud dari syarat if ((($page >= $noPage . if (($showPage != ($jumPage . = mysql_fetch_array($hasil)."."</td><td>".

$page. 'dbuser'.$_SERVER['PHP_SELF']. Demikian pula untuk perintah if (($showPage != ($jumPage ."</b> ". Perintah if (($showPage == 1) && ($page != 2)) echo ". // apabila $_GET['page'] sudah didefinisikan..&gt.. kita perlu link untuk memunculkan next >>. Digunakan untuk memunculkan tanda ‘…’ di antara halaman nomor 1 dengan halaman berikutnya yang tampil.$page. sehingga scriptnya menjadi <?php mysql_connect('namahost'. Namun link dari nomor halaman ini ditampilkan hanya pada nomor halaman yang sedang tidak aktif.".</a>".net/ide-membuat-advance-paging-dengan-php/print/ adalah hanya memunculkan link nomor halaman 1 dan juga halaman terakhir. 'dbpassword'). sekaligus pula nomor-nomor halaman dalam rentang 3 halaman sebelum dan sesudah nomor halaman yang aktif. pada script. else echo " <a href='". maka nanti diharapkan nomor halaman yang muncul adalah 1 4 5 6 7 8 9 10 15 Anda dapat mengubah rentang halaman sesuai yang diinginkan. maka tanda ini tidak muncul. Contoh jika halaman yang aktif adalah halaman 7 dari 15 halaman."'>Next &gt.. Sedangkan pada nomor halaman yang sedang aktif nomor halaman hanya dicetak tebal saja untuk menunjukkan bahwa halaman yang sedang aktif adalah halaman tersebut. OK kapan link ini muncul? ya benar… yaitu ketika halaman yang sedang aktif bukanlah pada halaman terakhir atau sebelum halaman terakhir.Rosihan Ari`s Blog » Ide Membuat Advanced Paging dengan PHP » Print http://blog. // sedangkan apabila belum.1)) && ($page == $jumPage)) echo "..$page. Terakhir.rosihanari.($noPage+1)."</a> ".. nomor halamannya 1."?page=". // jumlah data yang akan ditampilkan per halaman $dataPerPage = 5. if(isset($_GET['page'])) { 7 of 10 9/25/2010 7:58 PM . Sehingga kita bisa tambahkan perintah if ($noPage < $jumPage) echo "<a href='". gunakan nomor halaman tersebut. Apabila setelah 1 ini muncul 2. Sehingga dari kedua perintah di atas diharapkan akan menampilkan nomor halaman seperti di bawah ini 1 … 4 5 6 7 8 9 10 … 15 (bila yang aktif adalah halaman 7) 1 2 3 4 5 6… 15 (bila yang aktif adalah halaman 2) 1 … 10 11 12 13 14 15 (bila yang aktif adalah halaman 13) Sedangkan perintah if ($page == $noPage) echo " <b>". digunakan untuk menampilkan link nomor halaman."'>".$_SERVER['PHP_SELF']. mysql_select_db('dbname'). Tapi perlu diingat bahwa tanda ini akan muncul bila nomor halaman yang muncul setelah 1 ialah bukan 2. Perintah di atas digunakan untuk memunculkan tanda ‘…’ sebelum nomor halaman terakhir bila halaman sebelumnya yang muncul bukan ‘nomor halaman terakhir – 1′."?page=".".

$page++) { if ((($page >= $noPage .$page.". = mysql_fetch_array($hasil).$data['komentar']."'>".$_SERVER['PHP_SELF']."</b> ".$_SERVER['PHP_SELF']."?page="."</td><td>"."</a> ". = mysql_query($query). if (($showPage != ($jumPage ."'>Next &gt. // menentukan jumlah halaman yang muncul berdasarkan jumlah semua data $jumPage = ceil($jumData/$dataPerPage)..Rosihan Ari`s Blog » Ide Membuat Advanced Paging dengan PHP » Print http://blog."</td><td>".net/ide-membuat-advance-paging-dengan-php/print/ $noPage = $_GET['page'].1)) && ($page == $jumPage)) echo ".$data['tanggal']. } echo "</table>". // perhitungan offset $offset = ($noPage ."</td><td>".$data['email'].$page. else echo " <a href='". echo "<tr><td>Nama</td><td>Email</td><td>Tanggal</td><td>Komentar</td></tr>".</a>". $showPage = $page.3) && ($page <= $noPage + 3)) || ($page == 1) || ($page == $jumPage)) { if (($showPage == 1) && ($page != 2)) echo ". // mencari jumlah semua data dalam tabel guestbook $query $hasil $data = "SELECT COUNT(*) AS jumData FROM guestbook".."'>&lt. // memunculkan nomor halaman dan linknya for($page = 1. // menampilkan link previous if ($noPage > 1) echo "<a href='".&lt."?page=". $dataPerPage".&gt. while($data = mysql_fetch_array($result)) { echo "<tr><td>". $result = mysql_query($query) or die('Error'). if ($page == $noPage) echo " <b>". // query SQL untuk menampilkan data perhalaman sesuai offset $query = "SELECT * FROM guestbook LIMIT $offset.$page. } } // menampilkan link next if ($noPage < $jumPage) echo "<a href='".1) * $dataPerPage.$_SERVER['PHP_SELF']. // menampilkan data echo "<table border='1'>"."."</td></tr>".($noPage+1).. Prev</a>". 8 of 10 9/25/2010 7:58 PM ."?page=". $jumData = $data['jumData']. $page <= $jumPage.$data['nama'].($noPage-1)..rosihanari. } else $noPage = 1.

Selamat mencoba dan berpaging ria ingin mendownload scriptnya.rosihanari.rosihanari.rosihanari.net [4] FREE PROGRAMMING TOOLS.Rosihan Ari`s Blog » Ide Membuat Advanced Paging dengan PHP » Print http://blog.rosihanari.rosihanari.: http://programmingtools. Access [13] Mudahnya Membuat Barcode dengan PHP [14] Article printed from Rosihan Ari`s Blog: http://blog. [4] atau ingin berdonasi untuk pengembangan blog ini cukup dengan $1 via Paypal? Beberapa artikel terkait Script PHP Menampilkan Hasil Pencarian Multikategori dengan Advanced Paging [5] Membuat Nomor Urut Hasil Query di PHP (Combined with Paging) [6] Teknik Membuat On Page Paging [7] Membuat Nomor Halaman (Paging) di WordPress [8] Ide Membuat Sistem Login Aplikasi Multi User [9] Ide Membuat Generator Kode Unik Incremental Otomatis [10] Ide Membuat Script Upload Download File Dengan Batasan Hak Akses [11] Teknik Debugging Script PHP + MySQL [12] Script INSERT Data Dengan PHP dan MS.html [3] di blog ini: http://blog.net [2] Download Script: http://www.rosihanari.. silakan download di bawah ini [ Download Script [2] ] Jangan lupa terus stay tune di blog ini [3] karena pasti akan ada artikel-artikel menarik yang lain daripada yang lain seputar programming.net/script-php-menampilkan-hasilpencarian-multikategori-dengan-advanced-paging [6] Membuat Nomor Urut Hasil Query di PHP (Combined with Paging): http://blog.rosihanari.net [5] Script PHP Menampilkan Hasil Pencarian Multikategori dengan Advanced Paging: http://blog. Rating: 10.net URL to article: http://blog. tapi gak papa deh. mudah-mudahan ada manfaatnya bagi Anda.net/ide-membuat-advance-paging-dengan-php/print/ ?> Wah panjang juga ya artikelnya.zip.com/download/4546154/paging.net/ide-membuat-advance-paging-dengan-php URLs in this post: [1] member saya: http://source.ziddu.net/membuat-nomor-urut-hasil-query-di-phpcombined-with-paging 9 of 10 9/25/2010 7:58 PM .0/10 (4 votes cast) Jika Anda Anda ingin mendownload beberapa tool programming 100% gratis? Silakan download di FREE PROGRAMMING TOOLS.rosihanari.

rosihanari.net/ide-membuat-generator-kode-unik-incrementalotomatis [11] Ide Membuat Script Upload Download File Dengan Batasan Hak Akses: http://blog.Rosihan Ari`s Blog » Ide Membuat Advanced Paging dengan PHP » Print http://blog.net/ide-membuat-script-upload-downloadfile-dengan-batasan-hak-akses [12] Teknik Debugging Script PHP + MySQL: http://blog.net/script-insert-data-dengan-php-dan-ms-access [14] Mudahnya Membuat Barcode dengan PHP: http://blog.rosihanari.rosihanari. All rights reserved. 10 of 10 9/25/2010 7:58 PM .net/mudahnya-membuat-barcode-dengan-php Copyright © 2009 Rosihan Ari`s Blog.rosihanari.rosihanari.rosihanari.net/ide-membuat-sistem-login-aplikasi-multi-user [10] Ide Membuat Generator Kode Unik Incremental Otomatis: http://blog.net/teknik-debugging-script-php-mysql [13] Script INSERT Data Dengan PHP dan MS.rosihanari.net/ide-membuat-advance-paging-dengan-php/print/ [7] Teknik Membuat On Page Paging: http://blog.net/teknik-membuat-on-page-paging [8] Membuat Nomor Halaman (Paging) di WordPress: http://blog.rosihanari.rosihanari.net/membuat-nomor-halaman-paging-di-wordpress [9] Ide Membuat Sistem Login Aplikasi Multi User: http://blog. Access: http://blog.

Sign up to vote on this title
UsefulNot useful