2013-02-11 55 views
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; 
    } 

你能告诉我我做错了什么

+0

错误是哪一行? – 2013-02-11 18:17:59

回答

2

看来,如果您的查询字符串没有在它的&,因此您的爆炸返回数组与一个项目,导致list()投掷通知。

你可能想:

  • 验证事实上在$_SERVER['QUERY_STRING']
  • 值考虑使用像parse_str()的东西来分析变量出字符串
  • 的验证中的值的存在查询字符串单独

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

+0

问题是我想使用这个列表函数,如果它是由用户提供的(例如http:// site/news?year = 2013&month = 2),但默认情况下脚本应该加载main.php,但它没有。我不知道什么是错的。通过访问网站?和&参数没有错误 – 2013-02-11 19:02:57

+0

问题是'explode()'返回一个数组,而不是字符串。你正在尝试,所以这个数组被设置为'$ str'。然后你试图进一步爆炸'$ str',它又是一个数组而不是一个字符串,因此你所拥有的第二个'list()'行根本不起作用。同样,你应该使用'$ _GET'来寻找你想要的特定值,或者至少使用'parse_str()'。 – 2013-02-11 20:42:43

+0

Thx的家伙,“解决”这个问题的最好的办法是设置error_reporting(0); – 2013-03-21 13:25:42

0

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

嗯,大部分的我知道的时候,出现错误Undefined offset:,当你试图定义一个阵列内没有索引字符。例如,$ var =“foo”;现在,如果你是echo $var[3];,你会得到相同的错误,因为,当3是“foo”的偏移量时;它只有三个字符,即从02;

做这样的事实,你给有限的代码,我会怀疑这个问题是某处explode('&', $squery, 2);

0

你可以做到这一点通过只检查区域设置在QUERY_STRING或不

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

}else{ 

    include 'main.php'; 
}