Exzilla.net
Contact
Home -> Articles -> Quick Start Guide to Pear DB Pager
 
Features
Forums
Files
Blogs
Quick Start Guide to Pear DB Pager
Apr 3, 2003
เรียบเรียงโดย Narisa N.
Author's Bio | E-Mail
Copyright (C) 2003 exzilla.net

เรียบเรียงจากเอกสารต้นฉบับ Pear DB Pager " http://vulcanonet.com/soft/?pack=pager " โดย Tomas V.V.Cox


Pear DB Pager เป็น class ที่จัดการเกี่ยวกับการแสดงข้อมูลเป็นหน้าๆ ซึ่งเป็นการดึงข้อมูลจากฐานข้อมูลโดยใช้ Pear DB

หมายเหตุ

  • สามารถหารายละเอียดเพิ่มเติมเกี่ยวกับ pager ได้ที่บทความของคุณ Rod Kreisler ที่ PHPBuilder.com
  • class ของ Pear DB Pager นี้ เป็น class ที่ extend มาจาก Pear DB ซึ่งสนับสนุนการทำงานแบบ "fetch absolute rows" ยกเว้นการติดต่อที่ผ่าน OCI8 และ ibase ซึ่งกำลังอยู่ในระหว่างการพัฒนา
  • ถ้าคุณใช้ Pager นี้กับ MySQL คุณต้องใช้ไฟล์ DB/mysql.php เวอร์ชันล่าสุดเท่านั้น เพราะเวอร์ชันเดิมจะมีปัญหากับ Pear DB driver และ form=0

ตัวอย่างการใช้งาน

<?php
require 'Pager.php';
$dsn = 'pgsql://postgres@localhost/erp';

if (DB::isError($con = DB::connect($dsn))){
die (DB::errorMessage($con));
}

$sql = "select * from clients";
if (DB::isError($res = $con->query($sql))){
die (DB::errorMessage($res));
}

// $from คือตัวแปรที่รับค่ามาจากการเรียก URL เช่น
// http://www.host.com/list.php?from=50
// แต่ถ้าเราไม่ได้กำหนดจาก URL โปรแกรมจะกำหนดให้เท่ากับ 0

if (isset($_GET['from']) {
$from = $_GET['from'];
}else{
$from = 0;
}

// $limit คือ ตัวแปรจำนวนแถวข้อมูลที่เราต้องการแสดงในแต่ละหน้า

$limit = 10;
$pager = new DB_Pager ($res, $from, $limit);

// $data ตรงนี้จะมีข้อมูลทั้งหมดที่จะใช้สร้าง page
// เพื่อทำ link และแสดงทางหน้าจอให้ผู้ใช้เห็น

$data = $pager->build();
if (DB::isError($data)){
die (DB::errorMessage($data));
}

if (!$data) {
die ('There were no results');
}

// ตัวอย่างการแสดงข้อมูล

echo '<html><body>';
echo $data['numrows'] . ' Results found';
echo 'Page '. $data['current'] . ' of ' . $data['numpages'];
echo $data['limit'] . ' results per page';

// ปุ่ม Previous
echo '<a href="'.$_SERVER['PHP_SELF']."?from=".$data['prev'].'"> '.' <-prev</a>';

// สร้าง link ไปที่หน้าต่างๆ
foreach ($data['pages'] as $page => $start_row) {
echo '| <a href="'.$_SERVER['PHP_SELF']."?from=".$start_row.'">'.$page.'</a>';
}

// ปุ่ม Next
echo '<a href="'.$_SERVER['PHP_SELF']."?from=".$data['next'].'"> '.' next-></a>';

// fetch เฉพาะข้อมูลที่แสดงในหน้านี้อย่างอัตโนมัติ
// สามารถใช้ function fetchInto() ได้เช่นกัน

while ($row = $pager->fetchRow(DB_FETCHMODE_ASSOC)){
   echo $row['id'] . "\n";
}
echo '</body></html>';
?>

 

รูปข้างล่างนี้ แสดงข้อมูลที่อยู่ในตัวแปร $data

 


ถ้า database backend ของเราไม่สนับสนุนการใช้ numrows() เราก็ยังคงสามารถใช้ Pager นี้ได้อยู่ โดย

<?php
require 'Pager.php';
PEAR::setErrorHandling(PEAR_ERROR_DIE);
$dsn = 'pgsql://postgres@localhost/erp';
$db = DB::connect($dsn);

// คำนวนจำนวนแถวข้อมูลเอง
$numrows = $db->getOne('select count(id) from clients');

// สั่ง query
$sql = "select * from clients";
$res = $db->query($sql);
$limit = 10;

// ส่งตัวแปร $numrows เพิ่มเข้าไปใน DB_Pager
$pager = new DB_Pager ($res, $from, $limit, $numrows);
....
?>

 

เราสามารถดึงข้อมูลมาได้โดย

<?php
require 'Pager.php';

// ใช้ parameter 3 ตัว

$data = Pager::getData($from, $limit, $numrows);
if (DB::isError($data)) {
   die ($data->getMessage());
}
?>

Note:
N/A

Complete Sample code:

References:
N/A


Keywords:

Pear DB Pager, Thai, Install, Pear, Pager, Page, Result

 

 
 
{exzilla.net -- e-development QuickStart --}



Copyright (c) 2001-2005 - Exzilla.net -  All Rights Reserved.
Contact Us | Privacy Policy | Terms & Conditions