-4

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

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

注意:未定义的索引:在第 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());
4

3 回答 3

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());
于 2013-04-15T18:01:19.850 回答
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。

于 2013-04-15T17:58:32.810 回答
0

你得到的“错误”并不是真正的错误。它们是通知。这意味着 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);
    

    两者都有效。

在您的情况下,@Omar Jackman 给出的答案将是一个优雅的解决方案。

于 2013-04-15T18:23:08.330 回答