PHP/MySQL-如何为已经自动生成的表中的行自动生成删除链接?
我有一个PHP脚本,它读取数据库表并将所有行插入HTML表,直到显示所有可用行,如下所示:PHP/MySQL-如何为已经自动生成的表中的行自动生成删除链接?,php,html,mysql,Php,Html,Mysql,我有一个PHP脚本,它读取数据库表并将所有行插入HTML表,直到显示所有可用行,如下所示: require_once('dbconnect.php'); $sql = "SELECT ID, Site, Type, Requested, Quote, PO, CADs, MCS, DFP, SIM, Prereqs, Design, Report, Delivered FROM Predictions"; $result = $conn-
require_once('dbconnect.php');
$sql =
"SELECT
ID, Site, Type, Requested, Quote,
PO, CADs, MCS, DFP,
SIM, Prereqs, Design, Report, Delivered
FROM Predictions";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo '<table class="table table-hover table-condensed">';
while($row = $result->fetch_assoc()) {
echo
'<tbody>'.
'<tr>'.
'<td>'.$row['ID'].'</td>'.
'<td>'.$row['Site'].'</td>'.
'<td>'.$row['Type'].'</td>'.
'<td>'.$row['Requested'].'</td>'.
'<td>'.$row['Quote'].'</td>'.
'<td>'.$row['PO'].'</td>'.
'<td>'.$row['CADs'].'</td>'.
'<td>'.$row['MCS'].'</td>'.
'<td>'.$row['DFP'].'</td>'.
'<td>'.$row['SIM'].'</td>'.
'<td>'.$row['Prereqs'].'</td>'.
'<td>'.$row['Design'].'</td>'.
'<td>'.$row['Report'].'</td>'.
'<td>'.$row['Delivered'].'</td>'.
'<td>'.
'<a href="#">'.
'<span class="edit"><i class="fa fa-pencil"></i></span>'.
'</a> | <a href="#">'.
'<span class="delete"><i class="fa fa-times"></i></span>'.
'</a>'.
'</td>'.
'</tr>'.
'</tbody>';
}
echo "</table>";
}
else
echo "0 results";
$conn->close();
require_once('dbconnect.php');
$sql=
“选择
ID、站点、类型、请求、报价、,
采购订单、CADs、MCS、DFP、,
SIM卡、预需求、设计、报告、交付
根据预测”;
$result=$conn->query($sql);
如果($result->num_rows>0){
回声';
而($row=$result->fetch_assoc()){
回声
''.
''.
“.$row['ID']”。
“.$row['Site']”。
“.$row['Type']”。
“.$row[“请求的”]”。
“.$row['Quote']”。
“.$row['PO']”。
“.$row['CADs']”。
“.$row['MCS']”。
“.$row['DFP']”。
“.$row['SIM']”。
“.$row['Prereqs']”。
“.$row['Design']”。
“.$row['Report']”。
“.$row[‘已交付’]”。
''.
' | '.
''.
''.
'';
}
回声“;
}
其他的
回显“0结果”;
$conn->close();
这一切都很好,但现在我想要一个基本上是删除按钮(您可以看到上面创建图标/链接的标记),它将自动填充,以与mysql数据库表的相应ID相对应
到目前为止,我的删除脚本如下所示,但我不知道在“WHERE id=”中放置什么,也不知道在正确设置后如何将其合并到我的第一个脚本中
<?php
require_once('dbconnect.php');
$sql = "DELETE FROM Predictions WHERE id=";
if($conn->query($sql) === TRUE)
echo "Item deleted successfully";
else
echo "Error deleting record; ". $conn->error;
$conn->close();
更改此选项
<a href='#'><span class='delete'>
我不知道您在这里使用的是什么驱动程序,但首选的解决方案是使用带有参数化查询的预处理语句
因此,您可以通过GET
参数将id
发送到“删除页面”。该页面获取该值,将其强制转换为int
,以避免SQL注入(请参阅下文),然后删除数据。您还可以使用标题
将它们重定向到上一页,而不是在那里重复成功。您可以将GET
参数附加到该url以显示成功消息。(或者您也可以在同一页上执行所有这些操作,只需检查id
是否正在发送)
此外,你应该有这个页面背后有人安全登录系统。您不希望任何用户/机器人能够执行该deletepage.php
我猜您使用的是mysqli
,因此请查看此文档,了解该驱动程序的准备语句。mysqli或PDO=>如果可能,请使用bindParam;)@是的,我把笔记和链接放进去了。但不确定OP使用的是什么驱动程序,mysqli的bindparam有一个下划线;而PDO没有。是的,它比你更像是OP的帖子;)(这就是为什么我+1你)谢谢你的建议。我已经在我的测试文件上实现了你的代码,并且我成功地使事情几乎正常工作。它为每个按钮分配正确的ID,甚至显示单击时项目已成功删除的回音,但是当我查看数据库时,记录仍然存在。有什么想法吗?我知道dbconnect.php中的用户拥有这些特权。另外,感谢您提供有关sql注入和预处理语句的更多信息,我将看一看。@ICHABSDRAUF它在注入方面是安全的。就恶意使用而言,不,您应该有一些适当的身份验证。检查请求用户是否拥有他们正在删除的记录(假设满足要求)或该用户是否是管理员。哦,在重读了我的答案后,我也发布了那个注释,你们也应该在某人的安全登录系统后面有这个页面。您不希望任何用户/机器人能够执行deletepage.php。
<a href='deletepage.php?id=" . $row["ID"] . "'><span class='delete'>
require_once('dbconnect.php');
$id = (int)$_GET['id'];
$sql = "DELETE FROM Predictions WHERE id=" . $id;
if($conn->query($sql) === TRUE) {
echo "Item deleted successfully";
} else {
echo "Error deleting record; ". $conn->error;
}
$conn->close();