ตัวอย่างสคริปป้องกันการแก้ไขข้อมูลซ้ำ ตัวอย่างดังกล่าวใชักับระบบแก้ไขประเภทสินค้า ป้องกันการแก้ไขข้อมูลซ้ำ และสามารถนำไปประยุกต์ใชักับระบบอื่นๆ ได้ เช่น ระบบป้องกันแก้ไข Username ซ้ำ ระบบป้องกันแก้ไขรหัสนักศึกษาซ้ำ เป็นต้น *Code ที่แจกจะรองรับการทำงาน PHP7 และ PHP8 *ฝึกไว้ครับเผื่อได้ใช้
ตัวอย่างระบบที่มีการแสดงรายงานเป็นกราฟแท่ง
1.ระบบยืมคืนอุปกรณ์กีฬา คลิก
2.เว็บอีคอมเมิร์ชราคาถูก คลิก
3.ระบบหอพัก คลิก
4.ฐานข้อมูลศิษย์เก่า คลิก
5.ระบบเบิกจ่ายเครื่องเขียนสำนักงาน คลิก
6.ระบบสอบออนไลน์ คลิก
7.ระบบห้องสมุด คลิก
8.ระบบอื่นๆ เพิ่มเติม คลิก
รวมคลิปสอนปรับพื้นฐาน ภาษา php ฟรี 100 คลิป ++ https://devbanban.com/?p=3940
มาเริ่มทำ workshop กันครับ *คอมเม้นอยู่ในโค้ด
0.รวม Workshop PHP PDO ก่อนหน้าคลิก
1.ให้สร้างฐานข้อมูลก่อนครับ เช่น ฐานข้อมูลชื่อ workshop_pdo
2.ตารางเก็บข้อมูลประเภท (tbl_type) พร้อมข้อมูลตัวอย่าง (จากนั้นไปที่เมนู sql คัดลอกโค้ดไปวางและ go)
1 2 3 4 5 6 7 8 9 10 11 |
CREATE TABLE `tbl_type` ( `type_id` int(11) NOT NULL, `type_name` varchar(100) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `tbl_type` (`type_id`, `type_name`) VALUES (1, 'computer'); ALTER TABLE `tbl_type` ADD PRIMARY KEY (`type_id`); ALTER TABLE `tbl_type` MODIFY `type_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2; |
3.สร้างโฟลเดอร์สำหรับทดสอบ เช่น ชื่อโฟลเดอร์ workshop_pdo *สำหรับคนที่เพิ่งฝึกยังไม่เข้าใจข้อนี้ว่าต้องสร้างไว้ที่ไหน ให้ดูคลิปชุดนี้ก่อน รวมคลิปสอนปรับพื้นฐาน ภาษา php ฟรี 100 คลิป ++ https://devbanban.com/?p=3940
4. การทำงานของ Code : อธิบายสั้นๆ คือ เช่น ถ้ามีข้อมูล “computer” อยู่แล้ว จะไม่สามารถแก้ไขข้อมูลจาก Row อื่นมาแทนชื่อดังกล่าวได้ หรือสั้นกว่านี้อีกก็คือ ป้องกันการแก้ไขข้อมูลซ้ำ นั้นเอง
5. Full Code : checkUpdateDuplicate.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 |
<?php //connect db $servername = "localhost"; $username = "root"; $password = "yourpassword"; //ถ้าไม่ได้ตั้งรหัสผ่านให้ลบ yourpassword ออก try { $condb = new PDO("mysql:host=$servername;dbname=workshop_pdo;charset=utf8", $username, $password); // set the PDO error mode to exception $condb->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //echo "Connected successfully"; } catch(PDOException $e) { echo "Connection failed: " . $e->getMessage(); } //ประกาศตัวแปร $type_id = 1; $type_name = 'computer'; //สมมติว่าเป็นข้อมูลที่ส่งมาจากฟอร์มแก้ไข //เปลียนเป็นชื่ออื่น เพื่อเช็คค่าซ้ำ //ตัวอย่างระบบแก้ไข https://devbanban.com/?p=4146 //query data เพื่อแสดงข้อมูลที่ต้องการแก้ไข $stmt = $condb->prepare("SELECT * FROM tbl_type WHERE type_id=:type_id AND type_name=:type_name "); $stmt->bindParam(':type_id', $type_id , PDO::PARAM_INT); $stmt->bindParam(':type_name', $type_name , PDO::PARAM_STR); $stmt->execute(); $row = $stmt->fetch(PDO::FETCH_ASSOC); //ตรวจสอบว่ามีข้อมูลที่คิวรี่ได้ไหม echo '<pre>'; print_r($row); echo '<hr>'; //นับจำนวนที่คิวรี่ได้ count row echo $stmt->rowCount(); echo '<hr>'; //สร้างเงื่อนไข ถ้าคิวรี่ข้อมูลได้ ให้ส่งไปเช็คค่าซ้ำ if ($stmt->rowCount() ==0) { //คิวรี่เช็คค่าซ้ำ $queryName = $condb->prepare("SELECT * FROM tbl_type WHERE type_name=:type_name"); $queryName->bindParam(':type_name', $type_name , PDO::PARAM_STR); $queryName->execute(); $rowName = $queryName->fetch(PDO::FETCH_ASSOC); //นับจำนวนที่คิวรี่ได้ count row echo $queryName->rowCount(); echo '<hr>'; //สร้างเงื่อนไข if($queryName->rowCount() == 0) { //แก้ไขได้ //sql update $sqlUpdate = $condb->prepare("UPDATE tbl_type SET type_name=:type_name WHERE type_id=:type_id"); $sqlUpdate->bindParam(':type_name', $type_name , PDO::PARAM_STR); $sqlUpdate->bindParam(':type_id', $type_id , PDO::PARAM_INT); $sqlUpdate->execute(); $condb = null; //close connect db $sqlUpdate->debugDumpParams(); echo '<hr>'; if ($sqlUpdate->rowCount() ==1) { echo 'แก้ไขข้อมูลสำเร็จ'; }else{ echo 'เกิดข้อผิดพลาด'; } }else{ echo 'ข้อมูลซ้ำ'; } }else{ echo 'Query ผิดพลาด !'; } //devbanban.com //รวมระบบพร้อมใช้ : https://devbanban.com/?p=4425 ?> |
6. ผลการทำงาน (อธิบายแล้วในข้อ 4)
7. เพิ่มเติม : เราสามารถกำหนดให้คอลัมภ์ที่ไม่ต้องการให้มีข้อมูลซ้ำเป็น Unique ได้โดยไม่ต้องเขียน Code ตามด้านบน แต่ที่พาเขียนเพื่อต้องการนำมาสร้างเงื่อนไขแจ้งเตือนแบบสวยๆ เช่น ใช้ Sweetalert คลิก เป็นต้น
ลองเอาไปประยุกต์ใช้ดูครับ และฝากติดตาม workshop ต่อๆ ไปด้วยครับผม
ฝึก SQL : https://devbanban.com/?p=4672
แหล่งศึกษา PDO เพิ่มเติม : https://devbanban.com/?cat=409&paged=5
List of PDOStatement::bindParam data_type parameters : https://www.php.net/manual/en/pdo.constants.php
ขอแนะนำระบบพร้อมใช้งาน *รายละเอียดและราคาอยู่ใต้คลิป
ระบบพร้อมใช้ทั้งหมด คลิก
ร่วมสนับสนุน ค่ากาแฟ ค่าโฮส devbanban.com ได้ที่
ธนาคารกรุงไทย สาขาเดอะมอลล์ท่าพระ
ชื่อบัญชี นายพิศิษฐ์ บวรเลิศสุธี เลขที่ 878-0-17747-6
————————————————————————————
ธนาคารไทยพาณิชย์ สาขามหาวิทยาลัยราชภัฏธนบุรี
ชื่อบัญชี นายพิศิษฐ์ บวรเลิศสุธี เลขที่ 406-359094-1
fanpage : https://www.facebook.com/sornwebsites/