เนื้อหาต่อไปนี้ เป็นแนวทางอย่างง่าย เกี่ยวกับการหาไอดีของรายการก่อนหน้า และ
รายการถัดไปของหน้ารายละเอียดรายการปัจจุบัน โดยจะยกตัวอย่างการใช้งานตาราง
จังหวัดในประเทศไทย tbl_provinces โดยมี province_id และ province_name
เก็บไอดีและชื่อจังหวัด ซึ่งมีไอดีทั้งหมดถึง 77 โดยเริ่มจากตัวแรกคือไอดี 1
สมมติไฟล์ทดสอบของเราคือ demo_page_detail.php
ถ้าเปิดไฟล์มาครั้งแรก จะเป็นการแสดงรายการชื่อจังหวัดลำดับแรกหรือไอดีเท่ากับ 1
ตามรูป
จากรูป ปุ่ม Back มี url เป็น demo_page_detail.php?provinceID=77
จะเป็นลิ้งค์ที่ไปรายการสุดท้าย ตามรูปแบบการวนลูป เพราะรายการปัจจุบันที่แสดงคือรายการที่ 1
ส่วนปุ่ม Next มี url เป็น demo_page_detail.php?provinceID=2 จะเป็นลิ้งค์ที่ไปรายการที่ 2
สมมติเรากด back ตามตัวอย่างด้านบน รายการที่แสดงจะเป็นรายการสุดท้ายตามรูป
จากรูป ปุ่ม Back มี url เป็น demo_page_detail.php?provinceID=76
จะเป็นลิ้งค์ที่ไปรายการก่อนหน้ารายการสุดท้าย โดยรายการปัจจุบันจะเป็นรายการสุดท้าย
ส่วนปุ่ม Next มี url เป็น demo_page_detail.php?provinceID=1 จะเป็นลิ้งค์ที่ไปรายการแรก
ตามรูปแบบการวนลูป เนื่องจากรายการปัจจุบันเป็นรายการสุดท้าย รายการถัดไปจะไม่มี ต้องวนไป
ที่รายการแรก
แนวทางก็ประมาณนี้ ส่วนคำอธิบายเพิ่มเติม ดูได้ตามโค้ดตัวอย่างด้านล่าง
โดยสามารถใช้เป็นแนวทางในการประยุกต์เพิ่มเติมได้ตามต้องการ
โค้ดไฟล์ dbconnect.php
<?php $mysqli = new mysqli("localhost", "root","","test"); /* check connection */ if ($mysqli->connect_errno) { printf("Connect failed: %s\n", $mysqli->connect_error); exit(); } if(!$mysqli->set_charset("utf8")) { printf("Error loading character set utf8: %s\n", $mysqli->error); exit(); }
โค้ดไฟล์ demo_page_detail.php
<?php require_once("dbconnect.php"); ?> <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <?php // ฟังก์ชั่นหาไอดีของรายการก่อนหน้า และรายการถัดไป ส่งค่าไอดีปัจจุบัน และค่าตำแหน่งที่ต้องการหา function getNaviID($checkID,$position){ global $mysqli; // กำหนดให้สามารถใช้ส่วนติดต่อฐานข้อมูลในฟังก์ชั่นได้ // ค่า 0 คือเช็คไอดีก่อนหน้า ค่า 1 คือเช็คไอดีถัดไป if($position==0){ // เช็คไอดีก่อนหน้า $sql = " SELECT province_id FROM tbl_provinces WHERE province_id < $checkID ORDER BY province_id DESC LIMIT 1 "; } if($position==1){ // เช็คไอดีถัดไป $sql = " SELECT province_id FROM tbl_provinces WHERE province_id > $checkID ORDER BY province_id LIMIT 1 "; } $result = $mysqli->query($sql); if($result && $result->num_rows>0){ // ถ้ามีไอดีก่อนหน้า หรือมีไอดีถัดไป ตามเงื่อนไข $postion ที่ตรวจสอบ $row = $result->fetch_assoc(); // ดึงค่าแล้ว return $row['province_id']; // แล้ว return ค่ากลับไป }else{ // ถ้าไม่มีไอดีตาม $position ที่ตรวจสอบ if($position==0){ // ถ้าเป็นการเช็คไอดีก่อนหน้า // และไอดีปัจจุบันคือไอดีแรก ไม่มีไอดีก่อนหน้า เราจะใช้ไอดีสุดท้าย เพื่อวนลูป เป็นไอดีก่อนหน้า $sql = " SELECT province_id FROM tbl_provinces WHERE 1 ORDER BY province_id DESC LIMIT 1 "; } if($position==1){ // ถ้าเป็นการเช็คไอดีถัดไป // และไอดีปัจจบุันเป็นไอดีตัวสุดท้าย ไม่มีไอดีถัดไป เราจะใช้ไอดีแรก เพื่อวนลูป เป็นไอดีถัดไป $sql = " SELECT province_id FROM tbl_provinces WHERE 1 ORDER BY province_id LIMIT 1 "; } $result = $mysqli->query($sql); if($result && $result->num_rows>0){// ถ้ามีไอดีก่อนหน้า หรือมีไอดีถัดไป จากเงื่อนไขใหม่ $row = $result->fetch_assoc(); // ดึงค่าแล้ว return $row['province_id']; // แล้ว return ค่ากลับไป } } } // ถ้ามีการส่งค่าไอดีของรายการที่ต้องการแสดง ให้คิวรี่แสดงรายการนั้นๆ if(isset($_GET['provinceID'])){ $sql = " SELECT * FROM tbl_provinces WHERE province_id='".$_GET['provinceID']."' ORDER BY province_id LIMIT 1 "; }else{ // ถ้าไม่มีการส่งค่า ให้แสดงรายการแรก $sql = " SELECT * FROM tbl_provinces WHERE 1 ORDER BY province_id LIMIT 1 "; } $result = $mysqli->query($sql); if($result && $result->num_rows>0){ // ถ้ามีรายการข้อมูล $row = $result->fetch_assoc(); // ดึงค่าข้อมูล $checkID = $row['province_id']; // กำหนดไอดีปัจจุบัน สำหรับใช้ในฟังก์ชันหาไอดีก่อนหน้า และไอดีถัดไป $prevID = getNaviID($checkID,0); // เรียกใช้ฟังก์ชั่น หาไอดีก่อนหน้า 0 คือ $postion สำหรับไอดีก่อนหน้า $nextID = getNaviID($checkID,1); // เรียกใช้ฟังก์ชั่น หาไอดีถัดไป 1 คือ $postion สำหรับไอดีถัดไป // นำไอดีก่อนหน้า และไอดีตัวถัพไป ไปใช้ในลิ้งค์ // echo "PrevID:".$prevID; // echo "NextID:".$nextID; ?> <br> <br> <div style="margin:auto;width:500px;text-algin:center;"> <h3><?=$row['province_name']?></h3> <hr> <a href="demo_page_detail.php?provinceID=<?=$prevID?>">Back</a> <a href="demo_page_detail.php?provinceID=<?=$nextID?>">Next</a> </div> <?php }else{ // กรณีไม่มีข้อมูล ?> <div style="margin:auto;width:500px;text-algin:center;"> ไม่พบข้อมูล<br> <a href="demo_page_detail.php">HOME</a> </div> <?php }?> </body> </html>
โค้ดตัวอย่างด้านบนข้างต้น เป็นการใช้งานกรณีเป็นรายการที่มีความไม่ซับซ้อน ใช้ primary key
ค่าเดียวส่งค่า หรือดึงข้อมูลจากตารางเดียว
แต่กรณีเป็นข้อมูลที่ซับซ้อน เราจะใช้วิธีกำหนดเป็น array แล้วจัดการอีกทีแทน รวมถึงมีการ
ใช้งาน ajax ใน jquery เพื่อเพิ่มความเร็วในการสร้างลิ้งค์ url หน้าก่อนหน้า หรือหน้าถัดไป
โดยจะกล่าวถึงในลำดับต่อไป รอติดตาม