2013-02-11 54 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'; 
}