【问题标题】:Delete Row with Input Button使用输入按钮删除行
【发布时间】:2013-03-14 00:54:55
【问题描述】:

我正在尝试创建一个表格,允许我通过单击删除按钮来删除一行。我确实在下面的链接上找到了一篇文章,它确实提供了一些帮助,但我仍然无法让它工作:Show all rows in mysql table then give option to delete specific ones。我已经编写了大部分代码,但我在删除时遇到了第 10 行的问题。 php页面。想法?

Main.php

$result = mysqli_query($con,"SELECT * FROM cs_general_info");

echo "<table><tr><td>Delete</td><td>First Name</td><td>Last Name</td><td>Address</td>td>Phone</td><td>E-Mail Address</td></tr>";

while($row = mysqli_fetch_array($result)) {

?>

<tr>
<td>
<form action="delete.php" method="POST">
<input type="hidden" name="delete_id" value="<?php echo $row['id']; ?>">
<input type="Submit" value="Delete"></form>
</td>

<?php

  echo "<td>" . $row['id'] ."</td>";
  echo "<td>" . $row['first_name'] . "</td>";
  echo "<td>" . $row['last_name'] . "</td>";
  echo "<td>" . $row['address'] . "</td>";
  echo "<td>" . $row['phone'] . "</td>";
  echo "<td>" . $row['email'] . "</td></tr>";

}

echo "</table>";

删除.php

"DELETE FROM cs_general_info WHERE id=".mysql_real_escape_string($delete_id);

【问题讨论】:

  • mysql_real_escape_string() 已弃用。使用PDO 或至少绑定你的参数。
  • 根本没有安全性??我可以看到几种方法可以轻松破解此代码...
  • 第 10 行有什么问题?

标签: php mysql


【解决方案1】:

希望delete.php 不仅仅是那一行。在delete.php 中,您将需要捕获POST 方法和$row[id];绑定它,然后删除它。

【讨论】:

    【解决方案2】:

    要在delete.php 文件中获取要删除的行的 id,您需要获取变量,如下所示:

    $delete_id = $_POST['delete'];
    

    警告:这是您使其工作所需的非常基本的功能。但是,在将其用于任何生产代码之前,您需要实现许多其他级别的安全性。

    【讨论】:

    • 我对 PHP 还很陌生,每个人都在提到安全性。您是否有参考资料可供我参考以了解有关 PHP 安全性的更多信息?
    • 谷歌“PHP SQL 注入”或类似的东西。那里有数百万篇文章。为了帮助您入门,下面是 PHP.net 网站上的一篇文章,它至少为您提供了我们正在讨论的问题的基本概述:php.net/manual/en/security.database.sql-injection.php
    【解决方案3】:

    如果那是您的delete.php,那么您错过了很多。您需要一个数据库连接,并且需要对数据库执行SQL 命令。但在您通过 $_POST 获取参数之前,这是您最不必担心的问题。

    Here is the PDO Manual for the database connection and SQL execution.

    And here is the manual for $_POST.

    【讨论】:

      【解决方案4】:

      您想在表格的每一行中放置一个链接或内联表单,然后有一个脚本来删除指定的行并将用户返回到您的页面。

      <table>
        <tbody>
      <?php foreach ($results as $result): ?>
          <tr>
            <td><?php echo $result->title; ?></td>
            <td>
              <form action="delete.php" method="post">
                <input type="hidden" name="id" value="<?php echo $result->id; ?>" />
                <input type="submit" value="Delete" />
              </form>
            </td>
          </tr>
      <?php endforeach; ?>
        </tbody>
      </table>
      

      然后delete.php

      <?php
      
      if (isset($_POST['id']) && intval($_POST['id']) > 0) {
          // create PDO instance; assign it to $db variable
          $sql = "DELETE FROM `table` WHERE `id` = :id LIMIT 1";
          $smt = $db->prepare($sql);
          $smt->bindParam(':id', $_POST['id'], PDO::PARAM_INT);
          $smt->execute();
      }
      
      header('Location: index.php');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-08
        • 2021-02-14
        • 2019-04-06
        • 2013-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多