2013-02-15 93 views
0

我收到了下面這些錯誤:未定義,偏移1級2的錯誤

Notice: Undefined offset: 1 in ... on line 93 
Notice: Undefined offset: 2 in ... on line 94 

是什麼這些錯誤意味着以及如何能解決嗎?我看不到問題出在哪裏,但我知道他們在點擊「模塊提交」按鈕後出現

$ moduleactive = 1;

$sql = "SELECT ModuleId, ModuleNo, ModuleName FROM Module WHERE ModuleActive = ? ORDER BY ModuleNo"; 


    $sqlstmt=$mysqli->prepare($sql); 

    $sqlstmt->bind_param("i", $moduleactive); 

    $sqlstmt->execute(); 

    $sqlstmt->bind_result($dbModuleId,$dbModuleNo,$dbModuleName); 


    $moduleHTML = ""; 
     $moduleHTML .= '<select name="modules" id="modulesDrop">'.PHP_EOL; 
$moduleHTML .= '<option value="">Please Select</option>'.PHP_EOL; 

    while($sqlstmt->fetch()) { 
     $moduleHTML .= sprintf('<option value="%1$s_%2$s_%3$s">%1$s - %2$s</option>'.PHP_EOL, $dbModuleNo, $dbModuleName, $dbModuleId); 
    } 

$moduleHTML .= '</select>'; 

    $pHTML = ""; 


    ?> 


<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post" onsubmit="return validation(event);"> 
<table> 
<tr> 
<th>Module: <?php echo $moduleHTML; ?></th> 
</tr> 
</table> 
<p><input id="moduleSubmit" type="submit" value="Submit Module" name="moduleSubmit" /></p> 
<div id="moduleAlert"></div> 
<div id="targetdiv"></div> 
</form> 

<?php 

if (isset($_POST['moduleSubmit'])) {  

$outputmodule = ""; 

$moduleInfo = explode("_", $_POST['modules']); 
$moduleNo = $moduleInfo[0]; 
$moduleName = $moduleInfo[1]; //Error line 93 
$moduleId = $moduleInfo[2]; //Error line 94 
$outputmodule = sprintf("<p><strong>Selected Module:</strong> %s - %s <input type='hidden' value='%s'></p>", $moduleNo, $moduleName, $moduleId); 

} 

?> 
+1

'$ _ POST [「模塊」]'沒有足夠的'_'分隔值。 – SparKot 2013-02-15 07:47:00

+1

[您同意做深入研究](http://stackoverflow.com/questions/ask-advice),然後才能問這個問題。您怎麼沒有在[通知中的76萬份搜索結果](https://www.google.de/search?q=undefined+offset+1+and+2+errors)中找到答案,也沒有[StackOverflow上的幾十個現有問題](http://stackoverflow.com/search?q=Notice+undefined+offset+1+and+2+errors+php) – Gordon 2013-02-15 08:16:33

+1

更好的檢查不錯[參考 - 這個錯誤是什麼意思在PHP?](http://stackoverflow.com/q/12769982/367456)首先,例如這可能匹配:http://stackoverflow.com/questions/12769982/reference-what-does-this-error-mean-in-php/12770836#12770836 – hakre 2013-02-15 08:16:41

回答

1

發生此錯誤是因爲$ moduleInfo varibale中該索引沒有值。 由於並非在$ _POST [ '模塊'] varible

來替換此,以避免錯誤

$moduleName =$moduleInfo[1]; //Error line 93 
$moduleId =$moduleInfo[2]; //Error line 94 

$moduleName = isset($moduleInfo[1])?$moduleInfo[1]:''; 
$moduleId = isset($moduleInfo[2])?$moduleInfo[2]:''; 
0

錯誤意味着由12引用的元素不定義。

你是explode用戶在modules發佈的帶下劃線的字符串。如果該字符串沒有任何(或足夠的)下劃線,則返回數組元素少於您想象的數組。

您應該驗證輸入然後再使用它,並檢查是否你實際上至少有3個要素:

$moduleInfo = explode("_", $_POST['modules']); 
if (count($moduleInfo) >= 3) { 
    $moduleNo = $moduleInfo[0]; 
    $moduleName = $moduleInfo[1]; //Error line 93 
    $moduleId = $moduleInfo[2]; //Error line 94 

    // validate the subparts (this is important as well!) 
} else { 
    // set your variables to some sane default or fail gracefully 
}