PHPで配列を扱っているときにエラーがでてしまいます。
エラーの内容は
Notice: Undefined offset: 1 in C:\xampp\htdocs\index.php on line 98 Notice: Undefined offset: 1 in C:\xampp\htdocs\index.php on line 99 Notice: Undefined offset: 1 in C:\xampp\htdocs\index.php on line 102 Notice: Undefined offset: 1 in C:\xampp\htdocs\index.php on line 105 Notice: Undefined offset: 1 in C:\xampp\htdocs\index.php on line 108
のようなもので、たぶん配列の要素を2個しか格納していないにも関わらず、配列の要素を3個格納しているものとして扱ってしまうようなときに発生するエラーだと考えています。
しかし、私の中ではその点には十分注意して作成したつもりです。
もし、どこか間違っていれば教えていただきたいです。
index.php
1 <DOCTYPE html> 2 <!--Web上での電卓の作成--> 3<html lang="ja"> 4 <head> 5 <meta charset="utf-8"> 6 <title>Web電卓</title> 7 <link rel="stylesheet" type="text/css" href="/style.css"> 8 </head> 9 10 <body> 11 <div> 12 <?php 13 $i = 0; 14 do { 15 $mark = array(); 16 } while ($i > 0); 17 ?> 18 <?php 19 //セッションの開始 20 session_start(); 21 22 require_once("util.php"); 23 //このページに来たとき、セッション変数の値を取り出す。 24 if(isset($_POST['sum'])){ 25 $sum = $_POST['sum']; 26 $_SESSION['sum'] = $sum; 27 } 28 else{ 29 $sum = ""; 30 } 31 if(isset($_POST['i'])){ 32 $i = $_POST['i']; 33 $_SESSION['i'] = $i; 34 } 35 else{ 36 $i = 0; 37 } 38 if(isset($_POST['mark'])){ 39 array_push($mark, $_POST['mark']); 40 $_SESSION['mark'] = $mark; 41 } 42 else{ 43 $error[] ="セッションエラーです。"; 44 } 45 ?> 46 47 <?php 48 //文字エンコード検証======================================================= 49 if(!cken($_POST)){ 50 $encoding = mb_check_encoding(); 51 $err = "Encoding Error! The expected encoding is". $encoding; 52 //エラーメッセージを表示して処理を終了させる 53 exit($err); 54 } 55 //HTMLエスケープ(XSS対策) 56 $_POST = es($_POST); 57 //======================================================================== 58 ?> 59 60 <?php 61 //POSTされた値を取り出す 62 $error = []; 63 64 if(isset($_POST["result"])){ 65 $result = (int)$_POST["result"]; 66 } 67 else{ 68 $error = '数値を入力してください'; 69 } 70 ?> 71 72 <?php 73 if(isset($_POST["number"])){ 74 $number = $_POST["number"]; 75 $result = ($result * 10) + $number; 76 $error = ''; 77 $isError = FALSE; 78 } 79 else if(isset($_POST["plus"])){ 80 $sum = (int)$sum + (int)$result; 81 $mark[$i] = 1; 82 $i++; 83 $result = 0; 84 $error = ''; 85 $isError = FALSE; 86 } 87 else if(isset($_POST["minus"])){ 88 $sum = (int)$sum + (int)$result; 89 $mark[$i] = 2; 90 $i++; 91 $result = 0; 92 $error = ''; 93 $isError = FALSE; 94 } 95 else if(isset($_POST["equal"])){ 96 $equal = $_POST["equal"]; 97 if(!is_null($mark)){ //足し算フラグがたっているとき 98 echo $mark[$i-1]; //98 99 if($mark[$i-1] == 1){ //99 100 $result = $sum + $result; 101 } 102 else if($mark[$i-1] == 2){ //102 103 $result = $sum - $result; 104 } 105 else if($mark[$i-1] == 3){ //105 106 $result = $sum * $result; 107 } 108 else if($mark[$i-1] == 4){ //108 109 $result = $sum / $result; 110 } 111 $sum = 0; 112 } 113 $error = ''; 114 $isError = FALSE; 115 } 116 117 else{ 118 //POSTされた値がないとき 119 $error = '数値を入力してください'; 120 $isError = TRUE; 121 } 122 ?> 123 </div> 124 125 126 <!--入力フォームの作成--> 127 <div class="Box"> 128 129 <!--現在開いているページにPOSTする--> 130 <form method="POST" action="<?php echo es($_SERVER['PHP_SELF'])?>"> 131 <ul class = "form"> 132 133 <?php if($isError): ?> 134 <!--エラーフラグが立っていればエラー出力--> 135 <input class="result" type="text" name="result" value="<?php echo $error ?>"> 136 <?php else: ?> 137 <!--立ってなければ$result表示--> 138 <input class="result" type="number" name="result" value="<?php echo $result ?>"> 139 <input type="hidden" name="sum" value="<?php echo $sum ?>"> 140 <input type="hidden" name="i" value="<?php echo $i ?>"> 141 <input type="hidden" name="mark" value="<?php echo $mark[$i-1] ?>"> 142 <?php endif ?> 143 144 <ul> 145 <li><input type ="submit" name="number" value ="AC"></li> 146 <li><input type ="submit" name="number" value ="+/-"></li> 147 <li><input type ="submit" name="number" value ="%"></li> 148 <li><input type ="submit" name="multiply" value = "÷"></li> 149 </ul> 150 <ul> 151 <li><input type ="submit" name="number" value ="7"></li> 152 <li><input type ="submit" name="number" value ="8"></li> 153 <li><input type ="submit" name="number" value ="9"></li> 154 <li><input type ="submit" name="multiply" value = "×"></li> 155 </ul> 156 <ul> 157 <li><input type ="submit" name="number" value ="4"></li> 158 <li><input type ="submit" name="number" value ="5"></li> 159 <li><input type ="submit" name="number" value ="6"></li> 160 <li><input type ="submit" name=minus value = "-"></li> 161 </ul> 162 <ul> 163 <li><input type ="submit" name="number" value ="1"></li> 164 <li><input type ="submit" name="number" value ="2"></li> 165 <li><input type ="submit" name="number" value ="3"></li> 166 <li><input type ="submit" name="plus" value = "+"></li> 167 </ul> 168 <div class="zero"><input type ="submit" name="number" value ="0"></div> 169 <div class="point"><input type ="submit" name="point" value ="."></div> 170 </ul> 171 <div class="equal"><input type ="submit" name="equal" value = "="></div> 172 173 </form> 174 </div> 175 176 177 </body> 178 179 </html> 180
util.php
1<?php 2 3//XSS対策のためのHTMLエスケープ 4function es($data){ 5 //$dataが配列のとき 6 if(is_array($data)){ 7 //再帰呼出し 8 return array_map(__METHOD__, $data); 9 } 10 else{ 11 //HTMLエスケープを行う 12 return htmlspecialchars($data, ENT_QUOTES, 'utf-8'); 13 } 14} 15 16function cken(array $data){ 17 $result = true; 18 foreach($data as $key => $value){ 19 if(is_array($value)){ 20 //含まれている値が配列のとき文字列に連結する 21 $value = implode("", $value); 22} 23 if(!mb_check_encoding($value)){ 24 //文字エンコードが一致しないとき 25 $result = faulse; 26 //foreachでの査定を終わらせる 27 break; 28 } 29} 30return $result; 31} 32 ?> 33
回答1件
あなたの回答
tips
プレビュー