การแบ่งหน้าแสดงผลข้อมูล ด้วย PHP
การค้นหาข้อมูลและนำข้อมูลการแสดง ถ้าข้อมูลมีจำนวนมากไม่สะดวกในการดู จำเป็นต้องแบ่งหน้าออกเป็นหน้า ๆ เพื่อให้ดูได้สะดวก ลักษณะเดียวกับที่ Google นำผลการค้นหามาแสดงให้ดู
หลักการ
กำหนดข้อมูลของ limit โดยคำนวณจาก จำนวนที่ต้องการให้แสดงข้อมูลในแต่ละหน้า เพื่อนำไปใช้หาข้อมูลในฐานข้อมูลด้วยคำสั่ง SELECT จากนั้นนำผลที่ได้ไปใส่ไว้ในตัวแปร Array เพื่อนำไปแสดงในแต่ละหน้า
ตัวอย่างโค้ด
<?php
$host= " "; //ข้อมูลฐานข้อมูลของท่าน
$usr= " ";
$pwd= " ";
$db= " ";
//ติดต่อฐานข้อมูล
$cid = mysql_connect($host,$usr,$pwd);
mysql_select_db($db);
if (!$cid) { echo "ERROR: " . mysql_error() . "\n"; };
$query = "SELECT * FROM socialMedia ORDER BY fname, subject DESC";
$result = mysql_query($query) or die("Couldn't execute query" . mysql_error()); // student table
$numrows=mysql_num_rows($result);
if ($numrows == 0)
{
echo "<table>";
echo "<tr valign=\"top\"><td></td><td><p>ไม่พบข้อมูล</p></td></tr></table>" ;
}
echo "<br>";
$limit=3; // กำหนดจำนวนบรรทัดในแต่ละหน้า
if (empty($s)) {
$s=0;
}
$count = 1 + $s ;
$query .= " limit $s,$limit"; // the first limit is msql command to start searching from
$result = mysql_query($query) or die("Couldn't execute query" . mysql_error()); // student table
$idx = 0;
while ($row= mysql_fetch_array($result)) {
$idx += 1;
$thisName = $row['fullName'];
$thisAddress = $row['address'];
$thisSubj = $row['subject'];
$thisScore = $row['score'];
$thisDate = $row['dateTaken'];
$thisProject = $row['project'];
$data_list[] = array("idx" => $idx, "name" => $thisName, "address" => $thisAddress, "subject" => $thisSubj, "score"=>$thisScore, "dateTaken"=>$thisDate, "project" => $thisProject);
}
echo "<p>";
reset($data_list); //move pointer to front
$numOfItems = count($data_list);
$limit = 3;
echo "<h2>ตัวอย่างการแบ่งหน้าด้วย PHP </h2> แสดงผลหน้าละ $limit รายการ";
echo "<table width='100%' border='1'><tr align='center'><td>ที่</td><td>ชื่อ</td><td>ที่อยู่</td>";
echo "<td>วิชา</td><td>คะแนน</td><td>ว/ด/ป</td><td>ชิ้นงาน</td></tr>";
// แสดงข้อมูล
while (list($k, $v) = each($data_list)) {
echo "<tr valign = \"top\"><td> $count) </td><td>" . $v["name"] . "</td> <td>" . $v["address"] . "</td><td>" . $v["subject"] . "</td><td align=\"right\">" . number_format($v["score"]) . " </td><td>" . $v["dateTaken"] . "</td><td>" . $v["project"] . "</td></tr>";
$count +=1;
echo "<P>";
} // end while
echo "</table>";
//break before paging
echo "<br />";
$numpages = ceil($numrows/$limit); //คำนวณหาจำนวนหน้า ปัดเศษขึ้นถ้ามีเศษ
$currPage = (($s/$limit) + 1);
for( $i=1; $i<= $numpages; $i++ ){
if($i % 45 == 1){ //ตัวเลขหมายเลขหน้าให้ลิงค์ว่าจะไปหน้าไหน กำหนดให้แสดง บรรทัดละ 45 ตัวเลข
echo "<br>";
}
if( $i == $currPage){
echo "<b> ". ($i) ."</b>"; // ถ้าเป็นหน้าปัจจุบัน ไม่ต้องมีลิงค์ แต่แสดงด้วยตัวหนา
}else{
$start = ( ($i-1) * $limit ); // start search from
echo " <a href=\"pagingSample.php?s=$start\">$i</a>";
}
}
$a = $s + ($limit) ;
if ($a > $numrows) { $a = $numrows ; }
if ($numrows < 1){
$b= 0;
}else{
$b = $s + 1;
};
echo "<p> ข้อมูลรายการที่ $b ถึง $a จากข้อมูลทั้งหมด $numrows รายการ</p>";
?>
แสดงผล
หลักการ
กำหนดข้อมูลของ limit โดยคำนวณจาก จำนวนที่ต้องการให้แสดงข้อมูลในแต่ละหน้า เพื่อนำไปใช้หาข้อมูลในฐานข้อมูลด้วยคำสั่ง SELECT จากนั้นนำผลที่ได้ไปใส่ไว้ในตัวแปร Array เพื่อนำไปแสดงในแต่ละหน้า
ตัวอย่างโค้ด
<?php
$host= " "; //ข้อมูลฐานข้อมูลของท่าน
$usr= " ";
$pwd= " ";
$db= " ";
//ติดต่อฐานข้อมูล
$cid = mysql_connect($host,$usr,$pwd);
mysql_select_db($db);
if (!$cid) { echo "ERROR: " . mysql_error() . "\n"; };
$query = "SELECT * FROM socialMedia ORDER BY fname, subject DESC";
$result = mysql_query($query) or die("Couldn't execute query" . mysql_error()); // student table
$numrows=mysql_num_rows($result);
if ($numrows == 0)
{
echo "<table>";
echo "<tr valign=\"top\"><td></td><td><p>ไม่พบข้อมูล</p></td></tr></table>" ;
}
echo "<br>";
$limit=3; // กำหนดจำนวนบรรทัดในแต่ละหน้า
if (empty($s)) {
$s=0;
}
$count = 1 + $s ;
$query .= " limit $s,$limit"; // the first limit is msql command to start searching from
$result = mysql_query($query) or die("Couldn't execute query" . mysql_error()); // student table
$idx = 0;
while ($row= mysql_fetch_array($result)) {
$idx += 1;
$thisName = $row['fullName'];
$thisAddress = $row['address'];
$thisSubj = $row['subject'];
$thisScore = $row['score'];
$thisDate = $row['dateTaken'];
$thisProject = $row['project'];
$data_list[] = array("idx" => $idx, "name" => $thisName, "address" => $thisAddress, "subject" => $thisSubj, "score"=>$thisScore, "dateTaken"=>$thisDate, "project" => $thisProject);
}
echo "<p>";
reset($data_list); //move pointer to front
$numOfItems = count($data_list);
$limit = 3;
echo "<h2>ตัวอย่างการแบ่งหน้าด้วย PHP </h2> แสดงผลหน้าละ $limit รายการ";
echo "<table width='100%' border='1'><tr align='center'><td>ที่</td><td>ชื่อ</td><td>ที่อยู่</td>";
echo "<td>วิชา</td><td>คะแนน</td><td>ว/ด/ป</td><td>ชิ้นงาน</td></tr>";
// แสดงข้อมูล
while (list($k, $v) = each($data_list)) {
echo "<tr valign = \"top\"><td> $count) </td><td>" . $v["name"] . "</td> <td>" . $v["address"] . "</td><td>" . $v["subject"] . "</td><td align=\"right\">" . number_format($v["score"]) . " </td><td>" . $v["dateTaken"] . "</td><td>" . $v["project"] . "</td></tr>";
$count +=1;
echo "<P>";
} // end while
echo "</table>";
//break before paging
echo "<br />";
$numpages = ceil($numrows/$limit); //คำนวณหาจำนวนหน้า ปัดเศษขึ้นถ้ามีเศษ
$currPage = (($s/$limit) + 1);
for( $i=1; $i<= $numpages; $i++ ){
if($i % 45 == 1){ //ตัวเลขหมายเลขหน้าให้ลิงค์ว่าจะไปหน้าไหน กำหนดให้แสดง บรรทัดละ 45 ตัวเลข
echo "<br>";
}
if( $i == $currPage){
echo "<b> ". ($i) ."</b>"; // ถ้าเป็นหน้าปัจจุบัน ไม่ต้องมีลิงค์ แต่แสดงด้วยตัวหนา
}else{
$start = ( ($i-1) * $limit ); // start search from
echo " <a href=\"pagingSample.php?s=$start\">$i</a>";
}
}
$a = $s + ($limit) ;
if ($a > $numrows) { $a = $numrows ; }
if ($numrows < 1){
$b= 0;
}else{
$b = $s + 1;
};
echo "<p> ข้อมูลรายการที่ $b ถึง $a จากข้อมูลทั้งหมด $numrows รายการ</p>";
?>
แสดงผล
ความคิดเห็น
แสดงความคิดเห็น