Paging dengan PHP – Oracle
Paging adalah proses untuk menampilkan sebagian dari keseluruhan data. Misalkan, hanya menampilkan 10 dari 1000 baris data hasil query. Diantara alasan melakukan paging adalah untuk mempercepat proses penampilan data dan meringankan beban server.
Berikut ini adalah catatan paging yang saya lakukan menggunakan PHP dan database Oracle. Referensi yang saya gunakan adalah dari website Oracle.
Ada beberapa fungsi yang digunakan untuk melakukan paging ini.
Menghitung Total Halaman
function total_pages($total_rows, $rows_per_page) {
if ( $total_rows < 1 ) $total_rows = 1;
return ceil($total_rows/$rows_per_page);
}
Mendapatkan Baris Data Awal
function page_to_row($current_page, $rows_per_page) {
$start_row = ($current_page-1) * $rows_per_page + 1;
return $start_row;
}
Menghitung Total Baris Data
function count_rows() {
$conn = ocilogon('user','password','database');
$sql = "SELECT COUNT(*) AS num_rows FROM table_database";
$stmt = ociparse($conn,$sql);
ociexecute($stmt);
ocifetch($stmt);
return OCIResult($stmt,'NUM_ROWS');
}
Mencetak Navigasi Paging
function draw_pager($url, $total_pages, $current_page) {
if ( $current_page <= 0 || $current_page > $total_pages ) {
$current_page = 1;
}
if ( $current_page > 1 ) {
printf( "<a href='$url?page=%d'>[Start]</a> \n" , 1);
printf( "<a href='$url?page=%d'>[Prev]</a> \n" , ($current_page-1));
}
for( $i = ($current_page-3); $i <= $current_page+3; $i++ ) {
if ($i < 1) continue;
if ( $i > $total_pages ) break;
if ( $i != $current_page ) {
printf( "<a href='$url?page=%1\$d' style=\"color:#0000CC\">%1\$d</a> \n" , $i);
} else {
printf("<a href='$url?page=%1\$d' style=\"color: #FF0000\"><strong>%1\$d</strong></a> \n",$i);
}
}
if ( $current_page < $total_pages ) {
printf( "<a href='$url?page=%d'>[Next]</a> \n" , ($current_page+1));
printf( "<a href='$url?page=%d'>[End]</a> \n" , $total_pages);
}
}
Mencetak Data Sesuai Halaman Paging
function paged_result($start_row, $rows_per_page) {
$conn = ocilogon('user','password','database');
$sql = "SELECT *
FROM ( SELECT r.*, ROWNUM as row_number FROM table_database r
WHERE ROWNUM <= :end_row)
WHERE :start_row <= row_number";
$stmt = ociparse($conn,$sql);
ocibindbyname($stmt, ':start_row', $start_row);
// Calculate the number of the last row in the page
$end_row = $start_row + $rows_per_page - 1;
ocibindbyname($stmt, ':end_row', $end_row);
ociexecute($stmt);
// Fetch the number of rows per page
$rowResult = ocifetch($stmt);
settype($arrayResult,"array");
if($rowResult == null){
echo 'Tidak ditemukan';
$numRow = 0;
}else{
echo "<br/>";
echo "<br/>";
echo "<table border=\"1\" cellpadding=\"3\">";
echo "<tr>";
echo "<td>PERIODE</td>";
echo "<td>NO TELPON</td>";
echo "<td>ABODEMEN</td>";
echo "<td>AREA</td>";
echo "</tr>";
echo "<tr>";
echo "<td>".OCIResult($stmt,'PERIODE')."</td>";
echo "<td>".OCIResult($stmt,'NOTELPON')."</td>";
echo "<td>".OCIResult($stmt,'ABODEMEN')."</td>";
echo "<td>".OCIResult($stmt,'AREA')."</td>";
echo "</tr>";
while(ocifetch($stmt)){
echo "<tr>";
echo "<td>".OCIResult($stmt,'PERIODE')."</td>";
echo "<td>".OCIResult($stmt,'NOTELPON')."</td>";
echo "<td>".OCIResult($stmt,'ABODEMEN')."</td>";
echo "<td>".OCIResult($stmt,'AREA')."</td>";
echo "</tr>";
}
echo "</table>";
}
}
Sintaks Utama
session_start();
$current_page = 1;
if(isset($_GET['page'])){
$current_page = $_GET['page'];
}
$total_rows = count_rows();
$rows_per_page = 15;
$total_pages = total_pages($total_rows, $rows_per_page);
$start_row = page_to_row($current_page,$rows_per_page);
draw_pager("", $total_pages, $current_page);
paged_result($start_row, $rows_per_page);
Contoh Hasil
Berikut ini adalah contoh hasil paging yang dilakukan :






Makasih… Atas Ilmunya…..
Mantap bro, ternyata oracle cukup mudah ya
numpang bro:
http://www.300ribu.com
web murah terpercaya
Bos.. script’a bisa di persingkat ga?
mantap trims
mas, saya mau tanya nih,,
saya masih newbie banget nh,,
semua fungsi2 diatas, di taro di body semua y?
atau ada yang harus di taro di head?
trims,,
Subhanallah, Ibu ini. Terima kasih scriptnya.. it Works..Thanks..
mas kalau mau memakai query yang lebih rumit bisa gag misalkan sub query
Pake subquery? Bisa banget! Oh ya, saya “mba”. Bukan “mas” ya.
klw index hal paging n mw ditaruh dibawah gmana mbk cara n.. kan itu ada diatas hasil n..
Klo mau dibalik, pada bagian Sintaks Utama, tukar coding pada baris ke-13 dg ke-14. Artinya, panggil fungsi paged_result terlebih dahulu. Baru setelah itu panggil fungsi draw_pager.
ROWNUM itu apa ya?? apakah itu data dari database terpisah? kalo iya, boleh dishare structure databasenya biar lebih paham isi kodinganya…hehehe.
ROWNUM itu urutan baris data kesekian dari hasil query yg dilakukan.
ROWNUM = ROW + NUMber. Nomor baris.
mbak Putri salam kenal, ini saya dapat website wordpress nya mbak waktu browsing “menampilkan data dari database oracle melalui halaman web dengan php” langsung saja ya mbak saya punya script
——————————————————
PHP oracle
Demo menampilkan data dari Database kehalaman web
<?php
include ("konekoracle.php");
$query = "select kode_customer,nama_customer,alamat_customer,kota_customer,telepon_customer from customer order by kode_customer";
$statemen = oci_parse($c, $query);
oci_execute($statemen, OCI_DEFAULT);
echo "Query = query”;
echo “ hasil query:“;
?>
Kode Customer
Nama Customer
Alamat Customer
Kota Customer
telepon customer
—————————————————————-
untuk koneksi apache dengan oracle sudah terkoneksi tp kok data dari database saya tidak tampil ya mbak,,,,
kl boleh, tolong script saya dikoreksi,sudah 2 hari buntu ini mbak,,,
terima kasih sebelumnya,,,,
<html>
<head>
<title>PHP oracle</title>
</head>
<body>
<h2>Demo menampilkan data dari Database kehalaman web</h2>
<?php
include ("konekoracle.php");
$query = "select kode_customer,nama_customer,alamat_customer,kota_customer,telepon_customer from customer order by kode_customer";
$statemen = oci_parse($c, $query);
oci_execute($statemen, OCI_DEFAULT);
echo "Query = query”;
echo “ hasil query:“;
?>
<table border=”2 align=”center” width=”80%”>
<tr>
<th>Kode Customer</th>
<th>Nama Customer</th>
<th>Alamat Customer</th>
<th>Kota Customer</th>
<th>telepon customer</th>
</tr>
<tr>
<td></td>
<d></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
</body>
</html>
Coba cek lagi nama table-nya ya. Karena setahu saya nama table di Oracle ngga boleh pake spasi.
Lalu, setelah ociexecute, lakukan ocifetch. Dan untuk menampilkan hasilnya, gunakan OCIResult.
ini kode yang sudah saya perbaiki mbak putri tp tetap data dari database saya kok belum bisa tampil,,,,tolong source kode nya dikoreksi mbak, terima kasih sebelumnya,,,
—————————————————————————————-
<html> <head> <title>PHP oracle</title> </head> <body> <h2>Demo menampilkan data dari Database kehalaman web</h2> <?php include ("konekoracle.php"); $query = "select kode_customer, nama_customer, alamat_customer, kota_customer, telepon_customer from customer order by kode_customer"; $statemen = oci_parse($c, $query); oci_execute($statemen, OCI_DEFAULT); echo "<p>Query = %query</p>"; echo "<p><strong> hasil query:</strong></p>"; ?> <table border="2" align="center" width="80%"> <tr> <th>Kode Customer</th> <th>Nama Customer</th> <th>Alamat Customer</th> <th>Kota Customer</th> <th>telepon customer</th> </tr> <?php while($baris=oci_fetch_array($statemen,OCI_BOTH)) { ?> <tr> <td><?php echo $baris['kode_customer']; ?></td> <td><?php echo $baris['nama_customer']; ?></td> <td><?php echo $baris['alamat_customer']; ?></td> <td><?php echo $baris['kota_customer']; ?></td> <td><?php echo $baris['telepon_customer']; ?></td> </tr> <?php } ?> </table> <?php oci_free_statement($statemen); oci_close($c); ?> </body> </html>assalamuailaikum bu
mau nanya ni
kok ga bisa ya yg disintak utamanya
$total_rows = count_rows(); klu dijalankan yg keluar ”
Fatal error: Call to undefined function count_rows() in C:\xampp\htdocs\web\pag.php on line 9″
mohon penjelasannya
terima kasih