删除行 php&mysql 动态 link

delete row php&mysql dynamique link

我想制作一个 link 以使用动态 links 和 php 从数据库中删除记录,但我无法弄清楚 这是我的代码:

 <?php
$query = "SELECT * FROM posts ";
$result = mysqli_query($connect, $query);
?>

<table>
    <tr style="background: #afafaf;">
        <th>Id</th>
        <th>Title</th>
        <th>Action</th>
    </tr>
<?php
    while($rows = mysqli_fetch_assoc($result)){
        echo "<tr>";
            echo "<td class=\"center\">".$rows['id']."</td>";
            echo "<td>".$rows['title']."</td>";
            echo "<td><a href=\"delete_post.php?id=".$rows['id']."\"> delete</a></td>";
        echo "</tr>";
    }
?>
</table>

输出 link 会像 .../delete.php?id=X 谁能帮我写 delete.php 的代码?

那就是这样的:

$deleteId = $_GET['id'];

$sql = "DELETE FROM posts WHERE id = ".$deleteId;

记得在将变量发送到 MySQL 服务器之前对它们进行转义。

在您的页面中添加以下代码。这首先检查是否设置了 $_GET['id']。如果是,它只会 运行,这样你就不会得到 Undefined Index 错误。

<?php
if (isset($_GET['id'])) {
    $deleteId = htmlspecialchars($_GET['id'], ENT_QUOTES);

    $delete = "DELETE FROM `posts` WHERE `id` = " . $deleteId;
}
?>

我也用了htmlspecialchars to sanitize the user input. You could run some validation using ctype_digit来确保输入实际上是一个整数。

我建议在 MySQLi 中使用预处理语句来防止 SQL 注入。

编辑 1

ctype_digit 示例。这会检查 id 是否已设置,如果它是一个数字,从技术上讲,您可以只使用 ctype_digit 因为如果 id 为空,则 ctype 将 return false因为 var_dump(ctype_digit("")); 将 return false,考虑到这个逻辑,必须为 ctype_digit 设置值才能工作 它必须是一个整数。

<?php
if (ctype_digit($_GET['id'])) {
    $deleteId = htmlspecialchars($_GET['id'], ENT_QUOTES);

    $delete = "DELETE FROM `posts` WHERE `id` = " . $deleteId;
}
?>