1

我试图用列表爆炸对类别和子类别进行排序,但得到

未定义的偏移量:1

这是代码的一部分

$squery = $_SERVER['QUERY_STRING'];
$smarty->assign('query', $squery);
list($str, $trash) = explode('&', $squery, 2);
list($category, $subcategory) = explode('=', $str, 2);
switch($category)
    {
        case 'locale':
            $_SESSION['locale'] = $subcategory;
            checklocale();
            header('Location:'.($_SERVER['HTTP_REFERER'] ? $_SERVER['HTTP_REFERER'] : '.'));
            break;
        default:
            include 'main.php';
            break;
    }

你能告诉我我做错了什么吗

4

3 回答 3

3

好像您的查询字符串中没有一个&,因此您的爆炸返回一个包含单个项目的数组,导致list()抛出通知。

您可能想要:

  • 验证实际上有一个值$_SERVER['QUERY_STRING']
  • 考虑使用类似的东西parse_str()来解析字符串中的变量
  • 分别验证查询字符串中的值是否存在

您可能还需要考虑使用$_GET而不是$_SERVER['QUERY_STRING']更直接地访问参数的替代方法。如果参数以错误的顺序传递,您当前的方法很容易中断。

于 2013-02-11T18:23:10.053 回答
0

你能告诉我我做错了什么吗

好吧,我知道大多数时候Undefined offset:,当您尝试在数组中定义未索引的字符时,会出现错误。例如,$var = "foo"; 现在,如果你来了,echo $var[3];你会得到同样的错误,因为当 3 是“foo”的偏移量时;它只有三个字符,即 from 0to 2;

事实上,你给出了一个有限的代码,我怀疑问题出在某个地方explode('&', $squery, 2);

于 2013-02-11T18:22:49.023 回答
0

您可以通过仅检查是否在 QUERY_STRING 上设置区域设置来执行此操作

if(isset($_GET['locale'])){
         $_SESSION['locale'] = $subcategory;
        checklocale();
        header('Location:'.($_SERVER['HTTP_REFERER'] ? $_SERVER['HTTP_REFERER'] : '.'));

}else{

     include 'main.php';
}
于 2013-02-11T18:26:09.417 回答