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" のオフセットであるため、同じエラーが発生します。これは 3 文字のみで、つまり 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 に答える