【问题标题】:Delete database column from "select" statement using mySQL使用 mySQL 从“select”语句中删除数据库列
【发布时间】:2017-05-08 23:19:45
【问题描述】:

我有以下代码,它显示了我的书籍表中的所有书籍。

<select id="booksToDelete">
    <?php
        foreach($bookTitles as $bookTitle) {
        echo '<option>';
        echo $bookTitle['Title'];
        echo '</option>';
        }
    ?>
    </select>

<input type="submit" name="deleteBook" id="deleteBook" value="Delete Book" />
    <?php

我希望能够根据用户在 html 页面上选择的选项删除任何书,但我不知道如何完成它。这是我目前所拥有的:

if(isset($_POST['deleteBook']))
        $deleteQuery= 'DELETE FROM book WHERE Title=**I don't know what goes here**;
    ?>

请帮忙!!

【问题讨论】:

  • 标题在引号中,但“标题”不是唯一的,您应该使用 ID。您还应该在输入标题/ID 时参数化查询。如果问题是如何在选项中输入值,则需要添加属性value

标签: php html mysql sql database


【解决方案1】:

正如 chris85 在评论部分指出的那样,您应该使用IDs 来确定要在表中删除的内容。如果有书名完全相同,使用title会导致多次删除。

让我们修复您的option 标签。我们将使用value 属性将ID 作为值而不是title。让我们也为您的select 字段使用name 属性。

这是在form 标签内,对吧?

<form method="POST" action=""> <!-- PUT THE PAGE WHERE YOU WILL PROCESS THE REQUEST TO THE ACTION ATTRIBUTE -->
    <select name="booksToDelete" id="booksToDelete">
<?php
    foreach($bookTitles as $bookTitle) {
        echo '<option value="'.$bookTitle['id'].'">'; /** REPLACE CORRESPONDING INDEX WITH THE UNIQUE ID COLUMN OF THE book TABLE **/
        echo $bookTitle['Title'];
        echo '</option>';
    }
?>
    </select>
    <input type="submit" name="deleteBook" id="deleteBook" value="Delete Book" />
</form>

然后一旦提交。顺便问一下,您使用什么 mysql API 来连接数据库或执行查询?对于这个例子,让我们使用mysqli_*'s prepared statement:

/** ESTABLISH YOUR CONNECTION **/
$con = new mysqli("host", "user", "password", "database"); /** REPLACE NECESSARY DATA **/

/* CHECK CONNECTION */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

if(isset($_POST['deleteBook'])){

    $deleteQuery = "DELETE FROM book WHERE id = ?"; /** REPLACE NECESSARY UNIQUE ID COLUMN **/
    /*                                      ^       */

    $stmt = $con->prepare($deleteQuery);
    $stmt->bind_param("i", $_POST["booksToDelete"]);
    $stmt->execute();
    $stmt->close();

}

【讨论】:

    猜你喜欢
    • 2019-11-23
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 2021-01-28
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多