首页 > 解决方案 > 动态创建从表格中删除一行的按钮

问题描述

我正在尝试为数据库中的每一行创建一个按钮,按下该按钮将删除该特定行。我还应该提到,数据库中的数据显示正确,我正在使用的表也完全没问题。按钮出现在每一行的侧面,当单击按钮时,该行消失但数据没有被删除从数据库中,当重新加载页面时,先前“删除”的行重新出现。按下按钮后,我还收到此“致命错误:未捕获的错误:调用 C:\xampp\htdocs\INDUSTRIALPROJECT\records.php:56 中的未定义函数 mysql_query() 堆栈跟踪:#0 {main} 在 C:\第 56 行的 xampp\htdocs\INDUSTRIALPROJECT\records.php"。第 56 行是:$del = mysql_query("DELETE FROM records WHERE id=" . $row['id']);。当直接放入 phpMyAdmin 时,相同的查询工作正常。

    <?php
// Check connection
include_once 'config.php';
if ($link->connect_error) {
die("Connection failed: " . $link->connect_error);
}
$sql = "SELECT * FROM records";
$result = $link->query($sql);
function post($key){ return(isset($_POST[$key]) ? htmlspecialchars($_POST[$key]) : ""); }
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
    if(post('rowButton'.$row['id']) =="Delete"){
        $del = mysql_query("DELETE FROM records WHERE id=" . $row['id']);
        $deleted = '<p>Entry ' . $row['id'] . ' was succesfully deleted</p>';
    }
    else {
        echo '<form action ="' . $_SERVER['PHP_SELF'] . '" method="post">';
        echo "<tr>";
        echo "<td>" . $row['id'] . "</td>";
        echo "<td>" . $row["visitingdate"]. "</td>";
        echo "<td>" . $row["department"] . "</td>";
        echo "<td>" . $row["visitingreason"]. "</td>";
        echo "<td>" . $row["importance"]. "</td>";
        echo "<td>" . $row["visitorname"]. "</td>";
        echo "<td>" . $row["company"]. "</td>";
        echo "<td>". $row["internalrecipientname"]. "</td>";
        echo "<td>". $row["visitinglocation"]. "</td>";
        echo "<td>". $row["ETA"]. "</td>";
        echo "<td>". $row["ETD"]. "</td>";
        echo "<td>". $row["HRverification"]. "</td>";
        echo "<td>". $row["visitcompleted"]. "</td>";
        echo '<td><input type="submit" name="rowButton'. $row['id'] .'" value="Delete"/> </td>';
        echo "</tr>";
        echo "</form>";
    }
}
echo "</table>";
echo $deleted;
} 
else { echo "0 results"; }
$link->close();
?>

标签: phphtmlmysqlbutton

解决方案


首先,这似乎很容易受到 SQL 注入攻击。StackOverflow 很早就指出了这一点,因为它确实是一个已解决的问题,您应该在开发的早期阶段加以考虑。您正在获取不受信任的数据(由用户提交,未对其进行清理)并将其直接放入 SQL 查询中。当这种情况发生时,可能会发生坏事。现在撇开这一点,谈谈你的实际问题。

“什么都没有发生”意味着页面根本没有改变,对吧?所以浏览器不知道点击按钮时该做什么。

我认为您没有在此处放置任何声明,这是做任何有用的事情<form...>所必需的。<input type="submit">您可以将 JavaScript 与独立的提交按钮一起使用,但我在您的代码中也没有看到。您需要一些东西来告诉浏览器在按下提交按钮时要做什么。

我还没有真正测试过您的其余代码,但是根据您已经拥有的内容,您可以添加以下内容:

    else {
+         echo '<form action ="' . $_SERVER['PHP_SELF'] . '" method="post">';
        echo "<tr>";

        echo "</tr>";
+        echo "</form>";
    }

(不要添加加号,这只是为了显示添加了哪一行)。我应该补充一点,我通常不使用这样的提交按钮,所以我有可能错过了一些关于你如何调用它的额外细节,但将表单放在<form>标签中至少是一个好的开始。

编辑

mysql_query()函数在 PHP 7 中被移除;如果您使用的是较旧的 PHP,则需要添加对 MySQL 函数的支持,或者如果您使用的是 PHP 7,则应该使用 MySQLi 或 PDO_MySQL 函数。mysql_query 的 PHP 手册页上的警告框包含一些替代链接、如何选择替代链接以及其他可能对您有所帮助的支持文档。这个 StackOverflow 答案也可能有所帮助


推荐阅读