我试图用列表爆炸对类别和子类别进行排序,但是获取
未定义的偏移: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;
}
你能告诉我我做错了吗
答案 0 :(得分:2)
好像您的查询字符串中没有&
,因此您的爆炸返回一个包含单个项目的数组,导致list()
抛出通知。
你可能想:
$_SERVER['QUERY_STRING']
parse_str()
之类的东西来解析字符串您还可以考虑使用$_GET
代替$_SERVER['QUERY_STRING']
来替代更直接地访问参数。如果参数以错误的顺序传递,您当前的方法很容易中断。
答案 1 :(得分:0)
你能告诉我我做错了吗
好吧,大多数时候我都知道,当你试图在数组中定义一个未索引的字符时会出现Undefined offset:
错误。例如,$ var =“foo”;现在,如果你要echo $var[3];
,你会得到同样的错误,因为,当3是“foo”的偏移时;只有三个字符,即从0
到2
;
事实上,你提供了有限的代码,我怀疑问题是某个地方explode('&', $squery, 2);
答案 2 :(得分:0)
你可以做到这一点只检查区域设置是否在QUERY_STRING上设置
喜欢
if(isset($_GET['locale'])){
$_SESSION['locale'] = $subcategory;
checklocale();
header('Location:'.($_SERVER['HTTP_REFERER'] ? $_SERVER['HTTP_REFERER'] : '.'));
}else{
include 'main.php';
}