从表中删除不会删除行
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
根本没有执行,因为我们在问题中看到的代码在<form>
内。在这种情况下,按钮行为会覆盖链接行为,浏览器将提交表单而不是跟随链接。
您应该能够在浏览器的开发工具的网络选项卡中看到它。
作为快速修复,将按钮从提交按钮更改为按钮:
<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)