ผมเคยเขียนบทความแบบนี้มาครั้งนึงแล้ว http://www.select2web.com/php/how-to-delete-multi-row.html แต่ก็จะเขียนอีกครั้ง เผื่อว่าบทความนั้นยังไม่อาจสร้างความกระจ่างให้แก่ท่านได้อย่างชัดเจน มีมากดีกว่ามีน้อยเนอะ อาหารแบบเดียวกันที่แม่ครัวปรุงในแต่ละครั้ง รสชาติแตกต่างกัน บทความที่ผมปรุงขึ้นมาแต่ละครั้ง ถึงเรื่องเดียวกันก็ตาม รสชาติก็แตกต่างกัน เผื่อว่าบทความอันใหม่จะถูกลิ้นท่านมากกว่า
การลบข้อมูลโดยใช้ checkbox เป็นตัวเลือกนั้น หลักการอยู่ที่ เราจะสร้าง checkbox ให้เป็น Array และค่าที่เก็บใน checkbox แต่ละตัวก็จะเป็น primary key ของตาราง เวลาส่งข้อมูลไปยังหน้าที่มีโค้ดสำหรับลบ เราก็ลูปเอาค่าออกจาก checkbox Array ของเรา ก็จะได้ค่าที่ต้องการลบออกมาทั้งหมด
เอาละครับก่อนอื่นผมก็จะสร้างฐานข้อมูลขึ้นมา 1 ตัว ชื่อ db_test และในฐานข้อมูลนี้ผมจะสร้าง table ตัวอย่างขึ้นมา 1 ตัวชื่อ tbl_item
-- ---------------------------- -- Table structure for tbl_item -- ---------------------------- CREATE TABLE `tbl_item` ( `item_id` BIGINT(20) NOT NULL, `item_name` text, PRIMARY KEY (`item_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; |
ผมจะใส่ข้อมูลตัวอย่างไปสัก 3 ตัว เอาไว้ทดสอบการลบ
INSERT INTO `tbl_item` VALUES ('1', 'ชาเย็น'); INSERT INTO `tbl_item` VALUES ('2', 'ชาดำ'); INSERT INTO `tbl_item` VALUES ('3', 'กาแฟเย็น'); |
ทีนี้เราก็มาเขียนโค้ดกัน เริ่มจาก โค้ดสำหรับติดต่อฐานข้อมูล ซึ่งผมจะแยกไว้ต่างหาก แล้วค่อย include เข้ามา ไฟล์ connection.php และเก็บไว้ในโฟลเดอร์ย่อยชื่อ Connections จะได้เป็นสัดส่วน
<?php $hostname_connection = "localhost"; $database_connection = "db_tutorial"; $username_connection = "root"; $password_connection = ""; $connection = mysql_pconnect($hostname_connection, $username_connection, $password_connection) or trigger_error(mysql_error(),E_USER_ERROR); mysql_query("SET NAMES UTF8"); ?> |
ผมเลือกที่จะใช้ UTF-8
mysql_query("SET NAMES UTF8"); |
ต่อไปจะเป็นหน้าที่ใช้สำหรับแสดงข้อมูล และ checkbox สำหรับ เลือกข้อมูลที่จะลบ ไฟล์ item-list.php
<?php // เชื่อมต่อฐานข้อมูล require_once('Connections/connection.php'); mysql_select_db($database_connection, $connection); $query_rs_item = "SELECT * FROM tbl_item ORDER BY item_id ASC"; $rs_item = mysql_query($query_rs_item, $connection) or die(mysql_error()); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>List</title> </head> <body> <form action="delete.php" method="post" name="form1" id="form1"> <table width="500" border="0" cellpadding="0" cellspacing="0"> <tr bgcolor="#0099FF"> <td></td> <td>#</td> <td>item</td> </tr> <?php while($row_rs_item = mysql_fetch_assoc($rs_item)){ ?> <tr> <td><input name="item_id[]" type="checkbox" value="<?php echo $row_rs_item['item_id']; ?>" /></td> <td><?php echo $row_rs_item['item_id']; ?></td> <td><?php echo $row_rs_item['item_name']; ?></td> </tr> <?php } ?> <tr> <td> </td> <td> </td> <td><label> <input type="submit" name="button" id="button" value="ลบ item ที่เลือก" /> </label></td> </tr> </table> </form> </body> </html> |
ท่านสังเกตให้ดีนะครับ ผมตั้งชื่อ checkbox ว่า item_id[] มีเครื่องหมาย [] ต่อท้ายเพื่อให้มันเป็นคอนโทรลแบบ Array และ value ของ checkbox ก็คือ primary key ของตาราง tbl_item <?php echo $row_rs_item[‘item_id’]; ?>
<input name="item_id[]" type="checkbox" value="<?php echo $row_rs_item['item_id']; ?>" /> |
เมื่อคลิกปุ่ม submit ก็จะส่งค่าในฟอร์มทั้งหมด ซึ่งก็คือเหล่า checkbox ไปที่หน้า delete.php
<form action="delete.php" method="post" name="form1" id="form1"> |
ทีนี้ก็มาถึงไฟล์ที่เราจะใช้ลบข้อมูลที่ถูกเลือก ไฟล์ delete.php
<?php // เชื่อมต่อฐานข้อมูล require_once('Connections/connection.php'); mysql_select_db($database_connection, $connection); foreach( $_POST['item_id'] as $value ): $deleteSQL = sprintf( "DELETE FROM tbl_item WHERE item_id = ". $value ) ; $Result1 = mysql_query($deleteSQL, $connection) or die(mysql_error()); endforeach; header("Location:item-list.php"); ?> |
ลูป checkbox array ของเรา เพื่อเอา primary key แต่ละตัวออกมา สิ่งหนึ่งที่ท่านอาจจะไม่ได้สังเกตุ ธรรมชาติของ checkbox นั้นจะถูกส่งผ่านฟอร์มมาก็ต่อเมื่อ ถูกเลือกเท่านั้น
foreach( $_POST['item_id'] as $value ): |
ในลูปแต่ละรอบ จะลบข้อมูลจากตาราง tbl_item เฉพาะ item_id ที่ถูกเลือก
$deleteSQL = sprintf( "DELETE FROM tbl_item WHERE item_id = ". $value ) ; $Result1 = mysql_query($deleteSQL, $connection) or die(mysql_error()); |
หลังจากลบข้อมูลที่ต้องการทุกตัวแล้ว ก็ให้รีไดเร็กไปหน้า item-list.php
header("Location:item-list.php"); |
เห็นมั้ยครับว่า การลบข้อมูลด้วย checkbox นั้นเคล็ดลับมันมีอยู่นิดเดียวเอง
MOMOsang says:
26/04/2554 at 26/04/2554
ขอบคุณมากครับ
ช่วยในการทำโปรเจคผมเยอะเลย