【问题标题】:Trying to delete data from table, when the ID is not known until the user clicks delete. SQL & PHP尝试从表中删除数据,直到用户单击删除才知道 ID。 SQL & PHP
【发布时间】:2020-01-11 05:02:31
【问题描述】:

在我的 home.php 上,当管理员从 admin.php 提交博客时,我的博客会自动添加到其中。但是,我正在尝试添加删除功能,以便管理员能够从 home.php 中删除某个博客,而不是进入 PHPMyAdmin 数据库以从表中删除数据。

我尝试了不同的 SQL 语句并使用了不同的变量来尝试完成此操作,但似乎都没有工作。有些工作,但方式不正确(如按下删除按钮时,它会删除所有内容而不是选择博客)。

deletepost.php 中的 PHP 和 SQL 语句:

$blogid = $_GET['blogid'];
$query= mysqli_query($con, "SELECT blogid FROM blog_post WHERE blogid = '".$blogid."'");
if(mysqli_num_rows($query) > 0){

    $row=mysqli_fetch_array($query, MYSQLI_ASSOC); // fetch the data
    $query= mysqli_query($con,"DELETE FROM blog_post WHERE blogid = {$row['blogid']}");
    echo "deleted";

} else {
    echo mysqli_error($con);
}

mysqli_close($con)

home.php 代码:

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        $count = $count + 1;
        echo "<div class='the-blog'>";
        echo "<h2>".$row['postTitle']."</h2>";
        echo "<h3>Posted by: " . $row['author'] . "</h2>";
        echo "<p>". $row['postCont'] . " </p>";
        if(isset($_SESSION['admin'])){
                              if($_SESSION['admin'] == "admin"){
                                  echo "<form action='deletepost.php'>";
                                  echo "<input id='number' type='number' value=" . $row['blogid'] .">";
                                  echo "<br><input type='submit' value='Delete' name='delete'>";
                                  echo "</form>";
                              }}
        echo "</div>";  
    }
} else {
    echo "<h2 align='center'>Blog Currently Not Available!</h2>";
    }

我希望当管理员单击删除按钮时,它应该删除该特定博客。因此,例如,如果管理员单击最新博客上的删除按钮,那么它应该只从数据库中删除该数据。如果管理员要点击另一个博客,例如第 4 个博客,那么它应该从数据库中删除该特定博客。

【问题讨论】:

  • 检查查询是否执行。

标签: php html css sql


【解决方案1】:

删除前无需SELECT。只需使用表单中的值。

  • 使用准备好的语句,而不是直接将用户输入的数据注入到您的 SQL 语句中。
  • 使用表单方法 post 而不是 get 进行破坏性操作。
  • 在您的表单中使用name='blogid' 来实际通过网络发送ID。这可能是您删除所有内容而不是仅删除单个条目的原因。

home.php

<?php
// Notice method is post
if($_SESSION['admin'] == "admin"){
    echo "<form method='post' action='deletepost.php'>";
    echo "<input name='blogid' id='number' type='number' value=" . $row['blogid'] .">";
    echo "<br><input type='submit' value='Delete' name='delete'>";
    echo "</form>";
}}

deletepost.php

<?php
// Processing script. 
if ($_SESSION['admin'] == "admin") {
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {

        $blogid = $_POST['blogid'];

        $stmt = $con->prepare("DELETE FROM blog_post WHERE blogid = ?");
        $stmt->bind_param("i", $blogid); // Maybe it is a string? Then, use `s` instead of `i`nteger
        $stmt->execute();
        $stmt->close();

        echo "deleted";
    }
}

【讨论】:

  • 根据您提供的表格,该代码将不起作用。 1. 您在input 上缺少name 属性。 2.$_POST['blogid']永远不会通过。
  • 啊,是的……正在更新中。
猜你喜欢
  • 1970-01-01
  • 2014-07-28
  • 2018-06-08
  • 2021-01-04
  • 1970-01-01
  • 2023-01-05
  • 2021-08-15
  • 2013-04-06
  • 1970-01-01
相关资源
最近更新 更多