บทความนี้จะนำเสนอเรื่องการลบข้อมูลออกจากฐานข้อมูลด้วย checkbox ตอนแรกท่านต้องสร้างตารางชื่อ todo ในฐานข้อมูลก่อน ตามโครงสร้างที่ผมให้ไว้ด้านล่าง แล้วก็ใส่ข้อมูลตัวอย่างเข้าไปพอเป็นกษัย เอาสคริปต์ที่ผมให้มาด้านล่างไปรันใน phpmyadmin ก็ได้ครับ โจ๊ะเดียวได้ทั้งตารางในฐานข้อมูล ได้ทั้งตัวอย่างพร้อมเสร็จ จากนั้นจึงเขียนโค้ดไปตามตัวอย่าง
ขอให้สนุกกับการเขียนโค้ด
โครงสร้างดาต้าเบสเป็นอย่างนี้
--
-- Table structure for table `todo`
--
CREATE TABLE `todo` (
`ID` int(11) NOT NULL,
`name` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Dumping data for table `todo`
--
INSERT INTO `todo` (`ID`, `name`) VALUES
(1, 'ช่วยแม่ล้างจาน'),
(2, 'ซักผ้า'),
(3, 'รีดผ้า'),
(4, 'ขัดห้องน้ำ'),
(5, 'กวาดบ้าน'),
(6, 'พับผ้าปูที่นอน');
ตาราง todo มีฟิลด์แค่ 2 ฟิลด์คือ ID, name
ID : เป็น primary key
name : เก็บรายการที่จะต้องทำ
ผมจะแสดงเฉพาะวิธีการลบด้วย checkbox ให้ดูนะครับ จะได้เอาวิธีการไปประยุกต์ใช้กับการลบข้อมูลในฐานข้อมูลที่ต้องการ
เริ่มจาก สร้างหน้าดึงข้อมูลจากฐานข้อมูลออกมาให้ ติ๊กๆๆๆ เพื่อลบ
<?php
$host = "127.0.0.1";
$port = 3306;
$socket = "";
$user = "root";
$password = "";
$dbname = "todo";
$con = new mysqli($host, $user, $password, $dbname, $port, $socket)
or die ('Could not connect to the database server' . mysqli_connect_error());
mysqli_set_charset($con, "utf8");
$sql = "SELECT * FROM todo";
$result = $con->query($sql);
?>
<table>
<?php
while ($row = $result->fetch_object()) {
?>
<tr>
<td><input type="checkbox"/></td>
<td><?php echo $row->ID; ?></td>
<td><?php echo $row->name; ?></td>
</tr>
<?php
}
?>
</table>
<?php
$con->close();
ผลลัพธ์ที่ได้
ในโค้ดที่เขียนไว้ตัว checkbox ยังไม่มีชื่อ และไม่มี form ครอบคอนโทรลทั้งหมด และยังไม่มีปุ่มสำหรับคลิกเพื่อลบ
แก้ไขโค้ดหน่อย เพิ่มสิ่งที่ขาด
<?php
$host = "127.0.0.1";
$port = 3306;
$socket = "";
$user = "root";
$password = "";
$dbname = "todo";
$con = new mysqli($host, $user, $password, $dbname, $port, $socket)
or die ('Could not connect to the database server' . mysqli_connect_error());
mysqli_set_charset($con, "utf8");
$sql = "SELECT * FROM todo";
$result = $con->query($sql);
?>
<form method="post" action="">
<table>
<?php
while ($row = $result->fetch_object()) {
?>
<tr>
<td><input type="checkbox" name="del[]" value="<?php echo $row->ID; ?>"/></td>
<td><?php echo $row->ID; ?></td>
<td><?php echo $row->name; ?></td>
</tr>
<?php
}
?>
</table>
<input type="hidden" name="ispostback" value="true">
<input type="submit" name="sumit" value="Delete">
</form>
<?php
$con->close();
ผลลัพธ์
ผมเพิ่ม
<form method="post" action="">
<input type="checkbox" name="del[]" value="<?php echo $row->ID; ?>"/>
<input type="hidden" name="ispostback" value="true">
<input type="submit" name="sumit" value="Delete">
สำคัญที่สุดเลยก็คือชื่อของ checkbox ที่ผมตั้งเป็น del[] ผมตั้งชื่อให้มันเป็น control array เวลาเราลบข้อมูลที่หลังบ้านจะง่ายมาก
เขียนโค้ดในส่วนของการลบข้อมูลออกจากดาต้าเบส
<?php
$host = "127.0.0.1";
$port = 3306;
$socket = "";
$user = "root";
$password = "";
$dbname = "todo";
$con = new mysqli($host, $user, $password, $dbname, $port, $socket)
or die ('Could not connect to the database server' . mysqli_connect_error());
mysqli_set_charset($con, "utf8");
/** Delete todo */
if (!empty($_POST['ispostback']) && $_POST['ispostback'] == 'true') {
if (!empty($_POST['del']) && count($_POST['del']) > 0) {
$ids = implode(',', $_POST['del']);
$sql = "DELETE FROM todo WHERE ID IN ({$ids})";
$con->query($sql);
}
}
$sql = "SELECT * FROM todo";
$result = $con->query($sql);
?>
<form method="post" action="">
<table>
<?php
while ($row = $result->fetch_object()) {
?>
<tr>
<td><input type="checkbox" name="del[]" value="<?php echo $row->ID; ?>"/></td>
<td><?php echo $row->ID; ?></td>
<td><?php echo $row->name; ?></td>
</tr>
<?php
}
?>
</table>
<input type="hidden" name="ispostback" value="true">
<input type="submit" name="sumit" value="Delete">
</form>
<?php
$con->close();
โค้ดที่ผมเพิ่มเข้าไปมีแค่นี้
/** Delete todo */
if (!empty($_POST['ispostback']) && $_POST['ispostback'] == 'true') {
if (!empty($_POST['del']) && count($_POST['del']) > 0) {
$ids = implode(',', $_POST['del']);
$sql = "DELETE FROM todo WHERE ID IN ({$ids})";
$con->query($sql);
}
}
เข้ามาถึงก็เช็กว่ามีตัวแปร ispostback ไหม และมันมีค่าเป็น true ใช่มั้ย มันจะเป็นจริงได้กรณีเดียวก็คือมีการสับมิตปุ่มมาจากหน้าเว็บเท่านั้น
จากนั้นก็เช็กต่อว่ายูสเซอร์ได้ติ๊กเลือก del มาบ้างมั้ย ถ้ามีการติ๊กมาก็ให้เอาที่ติ๊กๆมานั่น ต่อเข้าด้วยกันโดยใช้ , (คอมม่า) คั่น เพื่อเอาไปใช้ในประโยค DELETE WHERE IN
ก็แค่เนี้ย ไม่มีอะไรซับซ้อน ลองก้อปโค้ดไปเล่นดู แล้วค่อยๆอ่านทำความเข้าใจ
โค้ดทั้งหมดจะเป็นดังนี้
<?php
$host = "127.0.0.1";
$port = 3306;
$socket = "";
$user = "root";
$password = "";
$dbname = "todo";
$con = new mysqli($host, $user, $password, $dbname, $port, $socket)
or die ('Could not connect to the database server' . mysqli_connect_error());
mysqli_set_charset($con, "utf8");
/** Delete todo */
if (!empty($_POST['ispostback']) && $_POST['ispostback'] == 'true') {
if (!empty($_POST['del']) && count($_POST['del']) > 0) {
$ids = implode(',', $_POST['del']);
$sql = "DELETE FROM todo WHERE ID IN ({$ids})";
$con->query($sql);
}
}
$sql = "SELECT * FROM todo";
$result = $con->query($sql);
?>
<form method="post" action="">
<table>
<?php
while ($row = $result->fetch_object()) {
?>
<tr>
<td><input type="checkbox" name="del[]" value="<?php echo $row->ID; ?>"/></td>
<td><?php echo $row->ID; ?></td>
<td><?php echo $row->name; ?></td>
</tr>
<?php
}
?>
</table>
<input type="hidden" name="ispostback" value="true">
<input type="submit" name="sumit" value="Delete">
</form>
<?php
$con->close();
Leave a Reply