แนวทางหาไอดีของรายการก่อนหน้า รายการถัดไป แบบวนลูป อย่างง่าย

เขียนเมื่อ 7 ปีก่อน โดย Ninenik Narkdee
รายการก่อนหน้า รายการถัดไป วนลูป

คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ รายการก่อนหน้า รายการถัดไป วนลูป

ดูแล้ว 4,414 ครั้ง


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


กด Like หรือ Share เป็นกำลังใจ ให้มีบทความใหม่ๆ เรื่อยๆ น่ะครับ







เนื้อหาที่เกี่ยวข้อง









URL สำหรับอ้างอิง





คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )







เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ