ผมเคยเขียนบทความแบบนี้มาครั้งนึงแล้ว 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>&nbsp;</td>
      <td>&nbsp;</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 นั้นเคล็ดลับมันมีอยู่นิดเดียวเอง

ดาวน์โหลดโค้ดตัวอย่าง