วันพฤหัสบดีที่ 4 เมษายน พ.ศ. 2556

การแบ่งหน้าแสดงผลข้อมูล ด้วย 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>";
?>

แสดงผล



ไม่มีความคิดเห็น:

แสดงความคิดเห็น