0

以下のエラーが発生します。

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);

}

?>
4

2 に答える 2

1

このエラーは、$moduleInfovaribaleのそのインデックスに値がないために発生します。$_POST['modules']変数に含まれていないため

エラーを回避するためにこれを置き換えます

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

$moduleName = isset($moduleInfo[1])?$moduleInfo[1]:''; 
$moduleId = isset($moduleInfo[2])?$moduleInfo[2]:'';
于 2013-02-15T07:47:03.550 に答える
0

エラーは、1およびによって参照される要素2が定義されていないことを意味します。

にユーザーがexplode投稿したアンダースコア付きの文字列を使用していますmodules。その文字列にアンダースコアがない(または十分でない)場合explodeは、思ったよりも少ない要素で配列が返されます。

入力を使用する前に検証し、実際に少なくとも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
}
于 2013-02-15T07:51:43.820 に答える