php - 动态创建从表格中删除一行的按钮
问题描述
我正在尝试为数据库中的每一行创建一个按钮,按下该按钮将删除该特定行。我还应该提到,数据库中的数据显示正确,我正在使用的表也完全没问题。按钮出现在每一行的侧面,当单击按钮时,该行消失但数据没有被删除从数据库中,当重新加载页面时,先前“删除”的行重新出现。按下按钮后,我还收到此“致命错误:未捕获的错误:调用 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();
?>
解决方案
首先,这似乎很容易受到 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 答案也可能有所帮助。
推荐阅读
- powershell - Terminal vs PowerShell
- c++ - 为什么我不能让这个数组正确地从文件中提取字符串,它在第一次通过时很好,但是当它循环时它失败了?
- php - Laravel 字符串到 Int 数组
- google-bigquery - Teradata 格式功能
- java - 如何制作 Thymeleaf url 表达式并将其绑定到 @RequestParam 注释
- javascript - 我想制作一个 chrome 扩展,它将从浏览器获取 url 并将其传递给存在于同一文件夹中的 python 脚本
- javascript - 如何使用 javascript 获取 datalist 的图像 src 或 id?
- json - cl-json decode-json 将 plist 键作为字符串而不是符号
- swift - 如何在 Swift UI 中使用 Firebase 登录?
- python - 如何将层次结构字典转换为识别文本和节点的格式?