2013-02-11 1 views
1

им пытаются сортировать категории и подкатегории с списком взрываются, но получитьне определено смещение при использовании списка взрываются

Undefined смещение: 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'] для прямого доступа к параметрам. Ваш текущий подход очень подвержен разрыву, если параметры переданы в неправильном порядке.

+0

Проблема заключается в том, что я хочу использовать эту функцию списка, если она предоставляется пользователем (например, http: // site/news? Year = 2013 & month = 2), но по умолчанию скрипт должен загружать main.php, но это не так. Я не знаю, что не так. Получая доступ к веб-сайту? и & аргументы отсутствуют ошибки –

+0

Проблема в том, что 'explode()' возвращает массив, а не строку. Затем вы пытаетесь, поэтому этот массив установлен в '$ str'. Затем вы пытаетесь продолжить взрыв '$ str', который снова является массивом, а не строкой, поэтому вторая строка' list() 'у вас не работает вообще. Опять же, вы, вероятно, должны просто использовать '$ _GET', чтобы искать нужные вам значения или, как минимум, использовать' parse_str() '. –

+0

Thx ребята, лучше всего «решить» эту проблему - установить error_reporting (0); –

0

Можете ли вы сказать мне, что я делаю неправильно

Ну, большую часть времени я знаю, появляются Undefined offset: ошибки, когда вы пытаетесь определить не-индексированные характер в массиве. Например, $ var = "foo"; Теперь, если вы были в echo $var[3];, вы получите ту же ошибку, потому что, когда 3 является смещением «foo»; который имеет только три символа и, например, от 0 до 2;

ли на самом деле, вы дали ограниченный код, я подозреваю, проблема где-то 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'; 
}