下記エラーが出てますが、該当箇所を見直しても何が間違っているのか理解ができません。
朝食か夕食かを選択して送信するボタンを押しても、お食事:が空白になります。
お手数おかけしますが、ご回答頂けると幸いです。
宜しくお願いします。
エラーコード
[30-Jul-2018 04:52:37 UTC] PHP Notice: Undefined variable: mealChecked in /Applications/MAMP/htdocs/tourplan.php on line 87 [30-Jul-2018 04:52:37 UTC] PHP Notice: Undefined variable: mealChecked in /Applications/MAMP/htdocs/tourplan.php on line 88 [30-Jul-2018 04:52:37 UTC] PHP Notice: Undefined variable: mealChecked in /Applications/MAMP/htdocs/tourplan.php on line 101 [30-Jul-2018 04:52:37 UTC] PHP Warning: count(): Parameter must be an array or an object that implements Countable in /Applications/MAMP/htdocs/tourplan.php on line 101 [30-Jul-2018 04:52:37 UTC] PHP Notice: Undefined variable: mealChecked in /Applications/MAMP/htdocs/tourplan.php on line 105 [30-Jul-2018 04:52:37 UTC] PHP Warning: implode(): Invalid arguments passed in /Applications/MAMP/htdocs/tourplan.php on line 105
tourplan.php
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>チェックボックス</title> <link href="../../css/style.css" rel="stylesheet"> </head> <body> <div> <?php require_once("util.php"); //文字エンコードの検証 if (!cken($_POST)) { $encoding = mb_internal_encoding(); $err = "Encoding Error! The expected encoding is " . $encoding; // エラーメッセージを出して、以下のコードを全てキャンセルする exit($err); } //HTMLエスケープ(XSS対策) $_POST = es($_POST); ?> <?php //エラーを入れる配列 $error = []; if (isSet($_POST[ "meal" ])) { //食事かどうか確認する $meals = [ "朝食","夕食" ]; //$mealsに含まれていない値があれば取り出す $diffValue = array_diff($_POST[ "meal" ], $meals); //規定外の値が含まれていなければok if (count($diffValue)==0) { //チェックされている値を取り出す $mealCheckd = $_POST[ "meal" ]; } else { $mealChecked = []; $error[] = "「食事」に入力エラーがありました。"; } } else { //POSTされた値がないとき $mealChecked =[]; } //POSTされたツアーを取り出す if (isSet($_POST[ "tour" ])) { //ツアーかどうか確認する $tours = [ "カヌー","MTB","トレラン"]; //$toursに含まれていない値があれが取り出す $diffValue = array_diff($_POST[ "tour" ], $tours); //規定外の値が含まれていなければok if (count($diffValue)==0) { //チェックされている値を取り出す $tourChecked = $_POST[ "tour" ]; } else { $tourChecked = []; $error[] = "「ツアー」に入力エラーがありました。"; } } else { //POSTされた値がない時 $tourChecked = []; } ?> <?php //初期値でチェックするかどうか function checked($value, $question) { if (is_array($question)) { //配列の時、値が含まれていればtrue $isChecked = in_array($value, $question); } else { //配列ではない時、値が一致すればtrue $isChecked = ($value===$question); } if ($isChecked) { //チェックする echo "checked"; } else { echo ""; } } ?> <form method="POST" action="<?php echo es($_SERVER['PHP_SELF']); ?>"> <ul> <li><span>食事:</span> <label><input type="checkbox" name="meal[]" value="朝食" <?php checked("朝食", $mealChecked); ?> >朝食</label> <label><input type="checkbox" name="meal[]" value="夕食" <?php checked("夕食",$mealChecked); ?> >夕食</label> </li> <li><span>ツアー:</span> <label><input type="checkbox" name="tour[]" value="カヌー" <?php checked("カヌー",$tourChecked); ?>>カヌー</label> <label><input type="checkbox" name="tour[]" value="MTB" <?php checked("MTB",$tourChecked); ?>>MTB</label> <label><input type="checkbox" name="tour[]" value="トレラン" <?php checked("トレラン",$tourChecked); ?>>トレラン</label> </li> <li><input type="submit" value="送信する" ></li> </ul> </form> <?php //食事とツアーのどちらかがチェックされていれば結果を表示 $isSelected = count($mealChecked) >0 || count($tourChecked) >0; if ($isSelected) { echo "<HR>"; //値を"と"で連結して表示する echo "お食事: " , implode( "と", $mealChecked), "<br>"; echo "ツアー: " , implode( "と", $tourChecked), "<br>"; } else { echo "<HR>"; echo "選択されているものはありません。"; } ?> <?php //エラー表示 if (count($error)>0) { echo "<HR>"; //値を"<br>"で連結して表示する echo '<span class="error">' , implode("<br>", $error) , '</span>'; } ?> </div> </body> </html>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。