Langsung ke isi

Paging dengan PHP – Oracle

Juni 14, 2010

En

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 :

Tabel Hasil Paging

18 Komentar leave one →
  1. Kholis permalink
    Oktober 1, 2010 02:30

    Makasih… Atas Ilmunya…..

  2. Tito permalink
    Oktober 21, 2010 06:56

    Bos.. script’a bisa di persingkat ga?

  3. Maret 24, 2011 15:33

    mantap trims

  4. arton permalink
    Juli 11, 2011 04:22

    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,,

  5. Juli 15, 2011 01:47

    Subhanallah, Ibu ini. Terima kasih scriptnya.. it Works..Thanks..

  6. hasan permalink
    Januari 3, 2012 10:12

    mas kalau mau memakai query yang lebih rumit bisa gag misalkan sub query

  7. eko permalink
    Februari 21, 2012 09:13

    klw index hal paging n mw ditaruh dibawah gmana mbk cara n.. kan itu ada diatas hasil n..

    • Maret 1, 2012 14:08

      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. :)

  8. anonim permalink
    Maret 1, 2012 11:51

    ROWNUM itu apa ya?? apakah itu data dari database terpisah? kalo iya, boleh dishare structure databasenya biar lebih paham isi kodinganya…hehehe.

  9. Maret 14, 2012 18:44

    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,,,,

    • Maret 14, 2012 18:55

      <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>

      • Maret 15, 2012 06:41

        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.

  10. Maret 15, 2012 17:22

    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>
    
  11. Mei 31, 2012 17:31

    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

Tinggalkan Balasan

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Ubah )

Twitter picture

You are commenting using your Twitter account. Log Out / Ubah )

Facebook photo

You are commenting using your Facebook account. Log Out / Ubah )

Connecting to %s

Ikuti

Get every new post delivered to your Inbox.

Bergabunglah dengan 167 pengikut lainnya.