【问题标题】:How to ignore Unidentified index? php mysql [duplicate]如何忽略未识别的索引? php mysql [重复]
【发布时间】:2014-11-15 14:22:11
【问题描述】:

我有未识别的索引错误,有时我需要它真的是空白的。

例如这个。我需要这个为空白,因为已经有一个 else 语句。

$_GET 仅在用户输入日期时使用。

$datefrom   = $_GET['datefrom'];
$dateto     = $_GET['dateto'];
if(isset($_GET['datefrom']) && ($_GET['dateto'])){
    $qry = "SELECT sum(order_detail.quantity*order_detail.price) as chenes, orders.date 
        FROM order_detail 
        LEFT JOIN orders 
        ON order_detail.orderid=orders.serial
        WHERE date(orders.date) BETWEEN '$datefrom' AND '$dateto'";
}
else {
    $qry = "SELECT sum(order_detail.quantity*order_detail.price) as chenes, orders.date 
        FROM order_detail 
        LEFT JOIN orders 
        ON order_detail.orderid=orders.serial";
}

如何忽略未识别的索引错误或即使有空白也将其删除?谢谢。

【问题讨论】:

  • 你听说过一种叫做“SQL注入”的东西吗?
  • 不要忽略它。修复它。
  • @sevenseacat 我知道它为什么显示错误,$datefrom 和 $dateto 是空白的,我如何捕捉到该错误?如果为空则不会显示错误。
  • 你看过PHP手册吗?
  • 错误信息包含行号。找到那条线并修复。是的,isset 是正确的方法(实际上是其中之一),但您需要在正确的地方使用它。

标签: php


【解决方案1】:

发生错误是因为您在使用isset() 实际检查它们是否存在之前尝试访问两个索引“datefrom”和“dateto”。将前两个赋值放在你的 if 语句之后,如下所示:

if(isset($_GET['datefrom']) && isset($_GET['dateto'])){
    $datefrom   = $_GET['datefrom'];
    $dateto     = $_GET['dateto'];
    // ...

还请注意,您很容易受到SQL-Injections

【讨论】:

  • 使用empty() 比使用isset() 更好。 empty()isset() 一样,但也会检查它是否为空
  • $_GET['datefrom'] 也可能包含一个空字符串。例如,考虑一个输入字段,用户必须手动指定 YYYY-MM-DD 中的日期。在这种情况下,empty() 也会返回 true。
【解决方案2】:

虽然安迪的回答会解决你眼前的问题,但你还有很多的工作要做,以使这甚至有点防弹。

您必须检查,如果提供了一个日期,那么另一个日期也是如此。您必须检查它们是否是有效格式的有效日期:php date validation

最后,为了进一步防范 SQL 注入攻击,您需要使用“绑定参数”,这使得 DBMS 将这些参数用作数据,无论它们看起来像 SQL:How to bind SQL variables in Php?

检查日期是否有效不是足以防范 SQL 注入,因为您打赌某处没有其他错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-31
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 2011-03-15
    相关资源
    最近更新 更多