PHP Ionic Angularjs Phonegap AJAX Javascript CSS MySQL jQuery Forum


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

31 January 2017 By
รายการก่อนหน้า รายการถัดไป วนลูป


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








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



Tags:: รายการก่อนหน้า รายการถัดไป วนลูป






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


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