PHP如何使用html表格按钮从数据库中删除特定行

时间:2018-08-23 09:19:33

标签: php html mysql

我正在尝试使用按钮从数据库中删除特定条目。我知道这个问题已经被问过几次了,不幸的是,这些解决方案对我而言并不真正有用。目的是,如果我单击第三行中的按钮,则删除该行。我有一个问题,我总是总是一次删除最后一个ID或所有ID。

也许有人可以帮助我,谢谢。

admin.php

<?php
include('connection.php');
include('read.php');
?>

<form action="admin.php" method="post">
            <div class="table-wrapper">
                <div class="table-scroll">
                    <table id="myTable">
                        <tr>
                            <th>ID</th>
                            <th>Kartentyp</th>
                            <th>Absender</th>
                            <th>Empfänger</th>
                            <th>Sendedatum</th>
                            <th id="smallCol">Verschickt</th>
                            <th id="smallCol">Bestätigung</th>
                            <th>Edit</th>
                        </tr>

                        <?php
                        foreach ($result as $row) {
                            if ($row['Dispatched'] == 0) {
                                $dispatched = 'Pending';
                            } else {
                                $dispatched = 'Versendet';
                            }
                            ?>
                            <tr class="Alle <?php echo $row['Category']; ?> <?php echo $row['Dispatched']; ?>">
                                <td><?php echo $row['ID']; ?></td>
                                <td><?php echo $row['Category']; ?></td>
                                <td><?php echo $row['Sender']; ?></td>
                                <td><?php echo $row['Receiver']; ?></td>
                                <td><?php echo $row['SendDate']; ?></td>
                                <td><?php echo $dispatched; ?></td>
                                <td>Placeholder</td>
                                <td><input type="submit" name="delete" value="delete" >
                                    <button data-target="modal1" class="modal-trigger">Modal</button>
                                </td>
                            </tr>
                            <?php

                        }
                        if (isset($_POST['delete'])) {
                            echo $row['ID'];

                            $deleteQuery = "DELETE FROM card WHERE id = " . $row['ID'];
                            $statement = $pdo->prepare($deleteQuery);
                            $statement->execute();
                        }
                        ?>
                    </table>
                </div>
            </div>
        </form>

read.php

<?php
include('connection.php');

$statement = $pdo->prepare("SELECT * FROM card ORDER BY ID ASC");
$statement->execute();
$result = $statement->fetchAll();
if ($statement->rowCount() > 0) {
    foreach ($statement->fetchAll() as $row) {
        $id = $row['ID'];
        $imagePath = $row["ImagePath"];
        $sender = $row["Sender"];
        $senderEmail = $row["SenderEmail"];
        $receiver = $row["Receiver"];
        $receiverEmail = $row["ReceiverEmail"];
        $subject = $row["Subject"];
        $text = $row["Text"];
        $sendDate = $row["SendDate"];
        $dispatched = $row["Dispatched"];
        $category = $row['Category'];

    }
}
?>

2 个答案:

答案 0 :(得分:1)

您可以使用get请求将其存档,而无需将整个数据发布到服务器。

    if( !empty($_GET['id']) ){
          $deleteQuery = "DELETE FROM card WHERE id = " . $id_to_delete;
          $statement = $pdo->prepare($deleteQuery);
          $statement->execute();
          header('location:youfilename.php');
          exit;

    }   

?>
                <div class="table-wrapper">
                    <div class="table-scroll">
                        <table id="myTable">
                            <tr>
                                <th>ID</th>
                                <th>Kartentyp</th>
                                <th>Absender</th>
                                <th>Empfänger</th>
                                <th>Sendedatum</th>
                                <th id="smallCol">Verschickt</th>
                                <th id="smallCol">Bestätigung</th>
                                <th>Edit</th>
                            </tr>

                            <?php
                            foreach ($result as $row) {
                                if ($row['Dispatched'] == 0) {
                                    $dispatched = 'Pending';
                                } else {
                                    $dispatched = 'Versendet';
                                }
                                ?>
                                <tr class="Alle <?php echo $row['Category']; ?> <?php echo $row['Dispatched']; ?>">
                                    <td><?php echo $row['ID']; ?></td>
                                    <td><?php echo $row['Category']; ?></td>
                                    <td><?php echo $row['Sender']; ?></td>
                                    <td><?php echo $row['Receiver']; ?></td>
                                    <td><?php echo $row['SendDate']; ?></td>
                                    <td><?php echo $dispatched; ?></td>
                                    <td>Placeholder</td>
                                    <td><a href="yourfilename.php?id=<?php echo $row['ID']; ?>">Delete</a>
                                        <button data-target="modal1" class="modal-trigger">Modal</button>
                                    </td>
                                </tr>
                                <?php

                            }
                            ?>
                        </table>
                    </div>
                </div>
            </form>

答案 1 :(得分:0)

您可以这样修改代码:

<?php
include('connection.php');
include('read.php');

if( !empty($_POST) ){

    foreach( $_POST as $key_post => $value_post ){


        if (preg_match('/delete_/i',$key_post) ) {

            $id_to_delete = (integer) str_replace('delete_','', $key_post);

            $deleteQuery = "DELETE FROM card WHERE id = " . $id_to_delete;
            $statement = $pdo->prepare($deleteQuery);
            $statement->execute();
        }
    }
}   

?>

<form action="admin.php" method="post">
            <div class="table-wrapper">
                <div class="table-scroll">
                    <table id="myTable">
                        <tr>
                            <th>ID</th>
                            <th>Kartentyp</th>
                            <th>Absender</th>
                            <th>Empfänger</th>
                            <th>Sendedatum</th>
                            <th id="smallCol">Verschickt</th>
                            <th id="smallCol">Bestätigung</th>
                            <th>Edit</th>
                        </tr>

                        <?php
                        foreach ($result as $row) {
                            if ($row['Dispatched'] == 0) {
                                $dispatched = 'Pending';
                            } else {
                                $dispatched = 'Versendet';
                            }
                            ?>
                            <tr class="Alle <?php echo $row['Category']; ?> <?php echo $row['Dispatched']; ?>">
                                <td><?php echo $row['ID']; ?></td>
                                <td><?php echo $row['Category']; ?></td>
                                <td><?php echo $row['Sender']; ?></td>
                                <td><?php echo $row['Receiver']; ?></td>
                                <td><?php echo $row['SendDate']; ?></td>
                                <td><?php echo $dispatched; ?></td>
                                <td>Placeholder</td>
                                <td><input type="submit" name="delete_<?php echo $row['ID']; ?>" value="delete" >
                                    <button data-target="modal1" class="modal-trigger">Modal</button>
                                </td>
                            </tr>
                            <?php

                        }
                        ?>
                    </table>
                </div>
            </div>
        </form>

您的错误是您没有使用POST值删除行,而是删除了来自查询读取的行变量中的最后一个ID存储区。

同样,您也会在PDO中错误使用prepare函数。