【问题标题】:Delete between with a button and $_GET在按钮和 $_GET 之间删除
【发布时间】:2016-10-10 03:57:22
【问题描述】:

我正在尝试设置一个按钮,该按钮将删除我们在此运行中加载的所有行,但它不起作用。

PHP:

if(isset( $_GET['startID'], $_GET['endID']))
{
     $sql_query = "DELETE FROM users WHERE id BETWEEN " .$_GET['startID'] . " AND " . $_GET['endID'] . ";";
     mysql_query($sql_query);
     header("Location: index.php");
}

按钮:

<a onClick="javascript: return confirm('Are you sure?');" href='index.php?startID=<?php echo $firstID; ?>&endID=<?php echo $lastID; ?>'>Delete</a>

按钮重定向到:index.php?startID=11111&amp;endID=22222

按钮正在传递值,但它们没有从数据库中删除。谁能指出我的错误?

【问题讨论】:

  • 您确定与数据库的连接已建立并正常工作吗?
  • 看看这个isset( $_GET['startID'], $_GET['endID'])和echo $sql_query,把字符串复制到数据库里运行,让我们知道运行成功时显示什么。
  • 当然,我已经用 11111 和 22222 替换了真实 ID。我收到了真实的第一个和最后一个 ID。
  • @FrayneKonok 看伙伴:take.ms/9sg3z。这一切都与 PhpMyAdmin 一起工作(我确实像你说的那样,回显了查询并直接运行它)。怎么了?
  • 安全问题不仅仅是查询。 @Ricardo 当您在另一个上下文中使用数据作为字符串输入时,它必须正确转义。您正在将数据回显到 HTML 中的查询字符串中......这是两个相互包装的上下文,您的代码会忽略两者。然后,在您的 PHP 中,您有机会使用已准备/参数化的查询从根本上将数据与查询分开。这保证了注入攻击不会发生在您的数据库上,如果它总是被使用的话。用它。这些超出了安全性...如果保持原样,您的代码有时将无法工作。

标签: php mysql get between


【解决方案1】:

对于此类问题,您需要自己开始调试。你真正需要做的是-

  1. 检查数据库连接是否建立。
  2. 检查应用的条件是否正确,您可以为此使用简单的回显。
  3. 回显查询字符串并输入phpMyAdmin,看看是否有任何遗漏或其他内容。

这些是对所有提出此类问题的 OP 的建议 问题。我们随时为您提供帮助。

【讨论】:

  • 我从没想过这种方法。这就是我喜欢 StackOverflow 的原因 :) 谢谢。
【解决方案2】:

尝试一下:

if(isset( $_GET['startID'], $_GET['endID']))
{
  for($i=$_GET['startID'];$i<=$_GET['endID'];$i++){
     $sql_query="DELETE * FROM users WHERE id=" .$i. ";";
     mysql_query($sql_query);                            
  }
  header("Location: index.php");
}

【讨论】:

  • 您的想法很好,但您也考虑了执行时间。您可以更好地在数组中和循环执行一次之后使用查询字符串。 [不好]。
  • 永远不要将数据直接连接到查询中。这是非常不安全的。
  • @Brad 你是说id=" .$i. ";";??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-09
  • 1970-01-01
  • 2021-11-17
  • 2022-10-20
  • 1970-01-01
  • 1970-01-01
  • 2012-03-16
相关资源
最近更新 更多