質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1263閲覧

チェックボックスを使う(PHP)

bitcoiner2045

総合スコア47

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/07/30 05:04

下記エラーが出てますが、該当箇所を見直しても何が間違っているのか理解ができません。
朝食か夕食かを選択して送信するボタンを押しても、お食事:が空白になります。
お手数おかけしますが、ご回答頂けると幸いです。
宜しくお願いします。

エラーコード

[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>

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決済です!宜しくお願いします。

投稿2018/07/30 05:07

bitcoiner2045

総合スコア47

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問