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

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

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

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

Q&A

解決済

1回答

4552閲覧

PHP フォームの送信ボタンを押すと表示が出るようにしたいです。

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

1クリップ

投稿2020/08/20 13:41

前提・実現したいこと

フォームのチェックボタンで、寿司が選択されると、「寿司です」、それ以外が選択されると「違います]と出るようにしたいです。

発生している問題・エラーメッセージ

フォームの送信ボタンを押すとメッセージが表示させるようにしたいのですが、最初から文字が表示されてしまいます。

該当のソースコード

php

1<?php 2if(isset($_POST['fooda'])) { 3 echo "寿司です " . "<br>"; 4 }else{ 5 echo "違います " . "<br>"; 6} 7?> 8 9<h2>好きな食べものは?</h2> 10<form method="post" action="suki.php"> 11 <input type="checkbox" name="fooda" value="寿司"> 寿司  12 <input type="checkbox" name="foodb" value="天ぷら"> 天ぷら  13 <input type="checkbox" name="foodc" value="芸者"> 芸者 14 <input type="submit" value="送信"> 15</form>

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

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

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

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

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

guest

回答1

0

ベストアンサー

やりたいことを見ると、3種類の結果を求めていると思います。

  1. 寿司にチェックボックスが入っているなら「寿司です」と表示すること
  2. 寿司にチェックボックスが入っていないなら「違います」と表示すること
  3. 最初にページを開いた時には何も表示しない

なので結果として、「寿司です」、「違います」、何も表示しない

の3パターンを設定しなければなりません。
質問者さんの状態では、寿司です、違います、の2パターンしか存在しないので
どちらかしか出ない…という状況です。

質問者さんのPHPコードでは、
$_POST['fooda'] が宣言されていれば True そうでなければ False を返します。

ページを最初に開いた時点では当然、$_POST['fooda'] は宣言されていないので False を返します。
PHPコードの中身はそのページが開かれた時点で必ず実行されますので、
このコードのままでは当然、「違います」が表示されてしまいます。

送信ボタンが押されているかどうかのチェックを追加する

まず、送信ボタンによってこのページが開かれたかどうかを判定させる必要があります。
最初にこのページを開いたときは送信ボタンが押されていない時なので、
それを判断基準に使えば条件が作れるのではないでしょうか。

その為にまず送信ボタンに名前を付けましょう。

html

1<h2>好きな食べものは?</h2> 2<form method="post" action="suki.php"> 3 <input type="checkbox" name="fooda" value="寿司"> 寿司  4 <input type="checkbox" name="foodb" value="天ぷら"> 天ぷら  5 <input type="checkbox" name="foodc" value="芸者"> 芸者 6 <input type="submit" name="submit_button" value="送信"> 7</form>

質問者さんのHTMLの送信ボタンに「submit_button」という名前を付けました。
こうすることで送信した後のデータ…

$_POST['submit_button'] に 送信 という文字列が格納されます。

まずはこれが宣言されているかどうかを判定します。
そしてこの条件をクリアしてきた場合は送信ボタンを押しているはずなので、
そこから$_POST['fooda']が宣言されているかどうかをチェックします。

php

1// if(isset($_POST['submit_button'])){ 皆様のご助言により訂正 2if($_SERVER['REQUEST_METHOD'] == 'POST'){ 3 if(isset($_POST['fooda'])) { 4 echo "寿司です<br>"; 5 } else { 6 echo "違います<br>"; 7 } 8}

このコードの場合、$_POST['submit_button']が宣言されていない = 送信ボタンが押されていない、
となるので、送信ボタンが押されていない場合はそもそも寿司なのかそうでないのかの判定を無視します。
有り体に言えばなにも表示されません。

ただ、選択がチェックボックス形式で特に質問に言及されていなかったのであれですが、
寿司にチェックボックスが入っていさえすれば「寿司です」と表示されます。
寿司だけにチェックボックスがあれば「寿司です」と表示するコードではないのでお気を付けください。

追記・寿司のみが選択されている場合を条件にする時

以下のコードの場合、寿司のみが選択されている時しかTrueになりません。
あくまで一例です。

html

1<h2>好きな食べものは?</h2> 2<form method="post" action="suki.php"> 3 <input type="checkbox" name="food[]" value="寿司"> 寿司  4 <input type="checkbox" name="food[]" value="天ぷら"> 天ぷら  5 <input type="checkbox" name="food[]" value="芸者"> 芸者 6 <input type="submit" name="submit_button" value="送信"> 7</form>

php

1//if(isset($_POST['submit_button'])){ 2if($_SERVER['REQUEST_METHOD'] == 'POST') { 3 if(isset($_POST['food']) && count($_POST['food']) == 1 && $_POST['food'][0] == "寿司") { 4 echo "寿司です<br>"; 5 } else { 6 echo "違います<br>"; 7 } 8}

投稿2020/08/20 16:37

編集2020/08/22 00:04
phiar_poet

総合スコア230

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

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

m.ts10806

2020/08/20 21:37

あまり、番号固定はよろしくないかと…。 そもそもPOSTリクエストかどうか確認したほうが実装としては望ましいと思います。
退会済みユーザー

退会済みユーザー

2020/08/21 04:21

$_SERVER['REQUEST_METHOD'] == 'POST' の判定が先、と。
phiar_poet

2020/08/21 23:55

反応が遅くなりましてすみません。 ご助言ありがとうございます! $_SERVER['REQUEST_METHOD'] なんて便利なものがあったんですね…。 質問者さんからの反応はないので質問者さんの質問の意図はどちらなのかわからないのですが、 今回のようにチェックボックスが複数ある、そのうちの指定されたもの1つだけが有効の時、 という判定を噛ませる場合の条件の書き方として、推奨されるやり方というのは どのようなものなのでしょうか?? 今回の質問者さんのものを例に例えると、 寿司、天ぷら、芸者…とチェックボックスがあり、 寿司のみが選択されている場合のみTrueにする条件の書き方として自分は ・送られてくる$_POST['food']の配列の長さが1である(データは1つしかない) ・1つしかないならば$_POST['food'][0]には寿司か天ぷらか芸者のいずれかが必ずあるので寿司を条件にする という考え方でこのコードを書きました。 もっとスマートな方法があるような気もしますが…どのような書き方がベターなのでしょう…?
退会済みユーザー

退会済みユーザー

2020/08/23 12:04

チェックボックスではなく、ラジオボタンの方が適切でした。大変わかりやすく、ありがとうございました。
m.ts10806

2020/08/23 23:22

>ラジオボタンの方が適切でした 要件次第です。 「好きな食べ物は?」の選択肢に「芸者」がある謎はともかく、 「上記以外」のような選択肢がない場合、「チェックボックスを全て外して送信する」も選択肢のうちとして用意するのもUX観点から必要に思います。 適切かどうかは設計によって決まるもので、「とりあえず現状回避のために選択」するものではありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問