เนื้อหาต่อไปนี้ เป็นแนวทางอย่างง่าย เกี่ยวกับการหาไอดีของรายการก่อนหน้า และ
รายการถัดไปของหน้ารายละเอียดรายการปัจจุบัน โดยจะยกตัวอย่างการใช้งานตาราง
จังหวัดในประเทศไทย 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
1 2 3 4 5 6 7 8 9 10 11 | <?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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | <?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 หน้าก่อนหน้า หรือหน้าถัดไป
โดยจะกล่าวถึงในลำดับต่อไป รอติดตาม