บทความนี้จะนำเสนอเรื่องการลบข้อมูลออกจากฐานข้อมูลด้วย 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();