เนื้อหาต่อไปนี้ เป็นแนวทางอย่างง่าย เกี่ยวกับการหาไอดีของรายการก่อนหน้า และ
รายการถัดไปของหน้ารายละเอียดรายการปัจจุบัน โดยจะยกตัวอย่างการใช้งานตาราง
จังหวัดในประเทศไทย 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 หน้าก่อนหน้า หรือหน้าถัดไป
โดยจะกล่าวถึงในลำดับต่อไป รอติดตาม