【问题标题】:Why am I getting these undefined index errors? [closed]为什么我会收到这些未定义的索引错误? [关闭]
【发布时间】:2013-04-07 22:51:18
【问题描述】:

为什么在我添加排序功能时我的代码中出现未定义的索引错误?这些是我遇到的错误

注意:未定义索引:在第 58 行的 C:\xampp\htdocs\how are things\admin panel\view.php 中排序

注意:未定义的索引:在第 61 行的 C:\xampp\htdocs\how are things\admin panel\view.php 中排序

注意:未定义的索引:在第 64 行的 C:\xampp\htdocs\how are things\admin panel\view.php 中排序

注意:未定义的索引:在第 67 行的 C:\xampp\htdocs\how are things\admin panel\view.php 中排序

注意:未定义的索引:在第 70 行的 C:\xampp\htdocs\how are things\admin panel\view.php 中排序

注意:未定义的索引:在第 73 行的 C:\xampp\htdocs\how are things\admin panel\view.php 中排序

注意:未定义索引:在第 76 行的 C:\xampp\htdocs\how are things\admin panel\view.php 中排序

这是第 58 61 64 67 70 73 76 行的代码

$result = "SELECT * FROM customers";
    if($_GET['sort'] == 'first_name'){
     $result .= " ORDER BY first_name";
    }
   else if($_GET['sort'] == 'last_name'){
     $result .= " ORDER BY last_name";
    }
     else if($_GET['sort'] == 'address'){
     $result .= " ORDER BY address";
    }
     else if($_GET['sort'] == 'phone_number'){
     $result .= " ORDER BY phone_number";
    }
     else if($_GET['sort'] == 'email'){
     $result .= " ORDER BY email";
    }
     else if($_GET['sort'] == 'city'){
     $result .= " ORDER BY city";
    }
     else if($_GET['sort'] == 'country'){
     $result .= " ORDER BY country";
    }
$result = mysql_query($result) or die(mysql_error());

【问题讨论】:

  • 欢迎来到 Stack Overflow!请不要使用mysql_* 函数编写新代码。它们不再维护,社区已经开始deprecation process。看到red box?相反,您应该了解prepared statements 并使用PDOMySQLi。如果你选择 PDO here is a good tutorial.
  • 使用if(isset($_GET['sort']) && $_GET['sort']== 'someval')
  • 我只是好奇——很多人似乎都在问这个问题——但是,你对Undefined index: sort 有什么不明白的地方?你使用$_GET['sort']...你收到通知说它是未定义的......而且......什么都没有?

标签: php mysql


【解决方案1】:

您应该检查是否设置了sort,然后使用它。也许这样的东西对你有用:

    $allowedSorts = array('first_name', 'last_name', 'address','phone_number', 'email', 'city', 'country');

    $sort = isset($_GET['sort']) ? $_GET['sort'] : '';
    $result = "SELECT * FROM customers";
    if(in_array($sort, $allowedSorts)){
         $result .= " ORDER BY {$sort}";
    }

    $result = mysql_query($result) or die(mysql_error());

【讨论】:

  • 我收到解析错误:语法错误,意外'{'
  • if(in_array($sort, $allowedSorts){ $result .= " ORDER BY {$sort}"; }
  • 该行的“)”后面应该有第二个“)”。
  • 很抱歉。我修正了我的答案
【解决方案2】:

你得到的“错误”并不是真正的错误。它们是通知。这意味着 PHP 正在通知您可能有问题。

在这种情况下,PHP 告诉您,您尝试在 $_GET-array 中访问的变量不存在。

有几种方法可以解决这个问题。

  • 告诉 PHP 在出现问题时不再通知您:

    //From this point on, show all errors except notices.
    error_reporting(E_ALL ^ E_NOTICE);
    

    但是,最好实际修复您的代码。

  • 正如许多其他答案所指出的,您可以防止代码尝试访问不存在的变量,方法是首先检查它是否确实存在。

    //Checks for the existence of any variable.
    isset($_GET['sort']);
    
    //Check if the specified array has a given key.
    array_key_exists('sort', $_GET);
    

    两者都有效。

在您的情况下,answer given by @Omar Jackman 将是一个优雅的解决方案。

【讨论】:

    【解决方案3】:

    在检查 sort 索引的值之前,您不会先检查它是否存在。

    试着写成:

    if (isset($_GET['sort'])) {
        switch ($_GET['sort']) {
            case 'first_name':
                $result .= ' ORDER BY first_name';
                break;
            case 'last_name':
                $result .= ' ORDER BY last_name';
                break;
    
            // etc...
        }
    }
    

    顺便说一句,mysql_* 函数已被弃用。研究使用 PDO。

    【讨论】:

      猜你喜欢
      • 2011-11-29
      • 1970-01-01
      • 2013-11-05
      • 2012-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-30
      相关资源
      最近更新 更多