从表中删除不会删除行

Posted

技术标签:

【中文标题】从表中删除不会删除行【英文标题】:Deleting from a table does not remove row 【发布时间】:2019-12-19 08:18:00 【问题描述】:

免责声明:我知道 SQL 注入,我先完成该功能。

我的删除按钮似乎没有删除我的 SQL 表中的行

products-one-time.php

这是我的 foreach 的输出,删除按钮下面的数字是 groupid,只是为了表明它们是唯一的。

这是删除按钮的代码,它在点击时重定向到 clinics_buttons.vc.php

  <a href="clinics_buttons.vc.php<?php echo '?delete-coupongroup='.$rowCouponGroup['groupid']; ?>" onclick="return confirm('Delete this group?');">
    <button class="btn btn-danger btn-sm full_width" data-toggle="modal">
      <i class="fa fa-edit"></i>DELETE
    </button>
  </a>
  <?php echo $rowCouponGroup['groupid']; ?>

clinics_buttons.vc.php

<?php
session_start();

$routePath = "../";
require_once($routePath . "_config/db.php");
  $dbConfig = new config_db();
  $db = $dbConfig->init();

$delete_coupongroup = $_GET['delete-coupongroup'];

if (isset($_GET['delete-coupongroup'])) 
  $stmt = $db->prepare("DELETE FROM `product_onetime` WHERE groupid = $delete_coupongroup");
  $stmt->execute();
  header('Location: ' . $_SERVER['HTTP_REFERER']);
  

?>

这是 product_onetime 表

我看到的是,我的代码看起来像是已连接,但删除按钮不起作用。我尝试在phpmyadmin中手动执行SQL,例如:

DELETE FROM `product_onetime` WHERE groupid = 5

手动操作可以,但是 php/sql 不行。想要一些意见。

【问题讨论】:

你尝试过什么调试?是否设置了$delete_coupongroup(顺便说一句,在您检查了值是否设置后,您应该真正设置它)。此外,您的准备好的语句并不是真正的准备好的语句,它应该具有绑定参数,而不是包含在其中的值。 我已经提到过,在添加绑定参数和反 SQL 注入等其他功能之前,我会先尝试让该功能正常工作。此外,“$delete_coupongroup”的值来自“products-one-time.php”中的 groupid 尝试使用 $_POST 并执行 var_dump($_POST['delete-coupongroup']) 来检查表单是否提交成功! 您能在if (isset($_GET['delete-coupongroup'])) 中添加var_dump($delete_coupongroup); 吗?只是为了检查它是否真的包含您所期望的内容 为什么要在链接中放置一个按钮?至少将type=button 添加到按钮,这样它就不会提交表单,从而重新加载页面。最好不要使用按钮,而是使用 CSS 使链接看起来像一个按钮 【参考方案1】:

我的猜测是文件clinics_buttons.vc.php 根本没有执行,因为我们在问题中看到的代码在&lt;form&gt; 内。在这种情况下,按钮行为会覆盖链接行为,浏览器将提交表单而不是跟随链接。

您应该能够在浏览器的开发工具的网络选项卡中看到它。

作为快速修复,将按钮从提交按钮更改为按钮:

<button type="button" class="btn btn-danger btn-sm full_width" data-toggle="modal">
  <i class="fa fa-edit"></i>DELETE
</button>

更好的解决方案是根本不使用按钮。只需使用 CSS 样式使链接看起来像一个按钮。或者,从外部表单标记中删除代码,并使用 Clinics_buttons.vc.php 作为表单操作为其提供自己的表单。

【讨论】:

是的,发现是form标签的问题,剩下的代码工作正常

以上是关于从表中删除不会删除行的主要内容,如果未能解决你的问题,请参考以下文章

如何从表中删除然后删除引用的已删除行? (postgresql)

如果 Redshift 中存在表,则从表中删除行,否则忽略删除

MySQL 从表中删除所有行并将 ID 重置为零

MySQL 从表中删除所有行并将 ID 重置为零

在笔记本上使用 pyspark 从表中删除行

从表中删除重复行