【问题标题】:undefined offset when using list explode使用列表爆炸时未定义的偏移量
【发布时间】:2013-01-26 22:01:01
【问题描述】:

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

未定义的偏移量: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;
    }

你能告诉我我做错了什么

【问题讨论】:

  • 错误在哪一行?

标签: php list smarty explode


【解决方案1】:

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

你可能想要:

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

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

【讨论】:

  • 问题是我想使用这个列表函数,如果它是由用户提供的(例如site/news?year=2013&month=2)但默认脚本应该加载main.php,但它没有。我不知道出了什么问题。通过访问网站?和 & 参数没有错误
  • 问题是explode()返回的是一个数组,而不是字符串。然后你正在尝试,所以这个数组设置为$str。然后,您试图进一步分解$str,它又是一个数组而不是字符串,因此您拥有的第二个list() 行根本不起作用。同样,您可能应该只使用$_GET 来查找您想要的特定值,或者至少使用parse_str()
  • 谢谢各位,“解决”这个问题的最好办法是设置 error_reporting(0);
【解决方案2】:

您可以通过仅检查 locale 是否设置为 QUERY_STRING 来做到这一点

喜欢

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

}else{

     include 'main.php';
}

【讨论】:

    【解决方案3】:

    你能告诉我我做错了什么

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-21
      • 1970-01-01
      • 2016-06-26
      • 1970-01-01
      • 1970-01-01
      • 2013-04-22
      • 1970-01-01
      相关资源
      最近更新 更多