【问题标题】:PHP delete functionality probably logical errorPHP删除功能可能是逻辑错误
【发布时间】:2024-04-29 16:45:02
【问题描述】:

在我的管理 PHP (admin.php) 的顶部,我已经从“DogSport”MySQL 数据库中的“Sport”表中加载了数据。单击特定记录的“编辑”链接后,我可以 编辑,删除“editform2.php”上的记录。即使在那个页面上,我也可以插入一条新记录。

问题:删除第一条和第二条记录不起作用!删除所有以下记录工作正常。此问题仅与删除功能有关。

代码段 - admin.php

<?php
                        include("dbconnect.inc.php");
                        //Retrieving Data
                        $query1="SELECT * FROM Sport ORDER BY SportId ASC";
                        $result2=mysqli_query($con, $query1);
                        $rows=mysqli_num_rows($result2);
                        $i=0;           
                        if($rows==0)
                            echo "<br/>There are no records";
                        else{
                            echo "<table id='sport'>";
                            echo "<tr><th>Sport Id</th><th>Sport Name</th><th>Description</th></tr>";

                            while ($row = mysqli_fetch_array($result2))
                            {
                                echo "<tr><td>" . $row["SportId"] . "</td><td>" . $row["SportName"] . "</td><td>" . $row["Description"] .
                                "</td><td> <a href='editform2.php?id=" . $row["SportId"] . "' target='_blank'>Edit</a></td></tr>";

                                $i++;
                            }
                            echo "</table>";
                        }
                    ?>

代码段 - editform2.php

if(isset($_POST["delete"])){
include("dbconnect.inc.php");
$query3="DELETE FROM Sport WHERE SportId=$id";
mysqli_query($con, $query3);
echo "<h1>Deleted Successfully</h1>";
mysqli_close($con);

}

我已经上传了必要的文件,你也可以使用包括数据库.sql脚本来检查它。感谢您的帮助。

https://www.dropbox.com/s/wn40u93oa1sxcph/SO.rar?dl=0

【问题讨论】:

  • 不确定是否 100% 但您使用的是 mysqli_query($con, $query3) 并且根据您的保管箱文件,$con 仅选择了数据库服务器,而不是数据库本身?应该是 mysqli_query($db_selected, $query3) 还是将 dbconnect.inc.php 文件中的 $con 更改为 mysqli_connect($servername, $username, $password, $dbname) 并消除单独连接到数据库的额外步骤
  • 您的建议似乎是正确的!我会尽快尝试的。但神秘的是,删除不仅对前两条记录有效。删除以下记录没有任何问题。如果选择数据库有问题,则不会删除任何记录。 :(
  • 我已将所有这些上传到我的服务器,我可以删除所有行。你能确认是什么问题吗?
  • 问题很奇怪。 “运动”表有 5 条记录。如果我尝试删除第一条或第二条记录(例如,运动 id 1 和 2),则表明它们已被删除(未显示错误),但实际上并未从数据库表中删除它们。但奇怪的是,如果我删除记录(运动 id 3、4、5),它们实际上会从表中删除。仅删除时仅存在第一条和第二条记录的问题。他们实际上也更新了..
  • 我下载了您的文件,上传了它们,将 SQL 表添加到测试数据库中,当我通过编辑表单页面删除这些行时,我们删除了 Sport 表中的所有内容。正如预期的那样。也许有什么东西在它们被移除后重新插入到你的一端?不过,使用您在 Dropbox 中提供的数据,一切正常。

标签: php html mysql content-management-system


【解决方案1】:
$query3="DELETE FROM Sport WHERE SportId=$id";

$id 的值在哪里设置?应该是$_POST["id"]吧?

附带说明 - SQL 注入风险 ...

【讨论】:

  • 当我点击特定记录的“编辑”链接时,$id 通过 URL 从 admin.php 发送到 editform2.php。在 editform2.php 中有一个按钮可以删除该记录。 isset($_POST["delete"]) 检查用户是否点击了该按钮。