Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/MySQL-如何为已经自动生成的表中的行自动生成删除链接?_Php_Html_Mysql - Fatal编程技术网

PHP/MySQL-如何为已经自动生成的表中的行自动生成删除链接?

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-

我有一个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->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();