为什么我会收到这些未定义的索引错误?

时间:2013-04-15 17:56:53

标签: php mysql

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

  

注意:未定义的索引:在C:\ xampp \ htdocs中排序\第58行的管理面板\ view.php是怎样的

     

注意:未定义的索引:在C:\ xampp \ htdocs中排序\第61行的管理面板\ view.php是怎样的

     

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

     

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

     

注意:未定义的索引:在C:\ xampp \ htdocs中排序\第70行的管理面板\ view.php是怎样的

     

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

     

注意:未定义的索引:在C:\ xampp \ htdocs中排序\第76行的管理面板\ 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());

3 个答案:

答案 0 :(得分:2)

您应该检查是否设置了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());

答案 1 :(得分:1)

在检查其值之前,您不是先检查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。

答案 2 :(得分:0)

您获得的“错误”并非真正的错误。他们是通知。这意味着PHP会通知您某些内容可能有问题。

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

有几种解决方法。

  • 当出现问题时,告诉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将是一个优雅的解决方案。