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

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

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

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

Q&A

解決済

2回答

1390閲覧

$_POST[]で受け取り、条件分岐を試みました。その際のエラー文の解決に困っています。

ryuuji_n

総合スコア10

PHP

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

0グッド

0クリップ

投稿2020/06/02 11:34

編集2020/06/02 12:04

前提・実現したいこと

if文を使用して、$_POST[]で受け取ったデータにより条件分岐しようとしました。
でてくる文章はこんにちは「sportsタイプバイク、ninja250です。」になるか 「残念です。」です。

そしてその出てくる結果には問題はないのですがエラー文がでる原因が分からなくて困っています。

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

求めている結果はでていますが、エラー文も表示されています。
Notice: Undefined index: hello in C:\xampp\htdocs\bike_php\hello.php on line 23

HTMLのインプットタグを2つ用意し、valueに出会った。と買わない。設定してあり、
どちらかのボタンを押すとhello.phpにインプットタグのname属性が送信されると考えました。

出会った。
の方を押した場合はhello.phpに画面がかわり、
エラーメッセージはでず、「こんにちはsportsタイプバイク、ninja250です。」
と表示されます。
買わない。
の方のボタンを押した場合は以下のように表示されます。
Notice: Undefined index: hello in C:\xampp\htdocs\bike_php\hello.php on line 23
残念です。

タイミングとしてはボタンを押し、画面がかわり表示された瞬間です。

該当のソースコード

該当箇所HTML <form action="hello.php" method="post"> <input type="submit" name="hello" value="出会った。"> <input type="submit" name="noHello" value="買わない。"> </form> 送信先 <body> <?php  class Bike250{   public $name;   public $type;   public function __construct($name,$type){   $this -> name = $name;   $this -> type = $type;   }  }  $ninja = new Bike250('ninja250','sports'); $z = new Bike250('z250','naked'); //該当23行目は次のif文の列です。 if($_POST['hello']){  echo $_POST['hello'] = "<p>こんにちは{$ninja -> type}タイプバイク、{$ninja -> name}です。</p>"; }elseif($_POST['noHello']){  echo $_POST['noHello'] = "<p>残念です。</p>"; } ?> </body>

補足情報

質問にて不足している情報などがございましたら伝えていただけるとありがたいです。
よろしくお願いします。
xamppを使用しての勉強のためのコーディングです。
よろしくお願いいたします。

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

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

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

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

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

m.ts10806

2020/06/02 11:48

コードはマークダウンのcode機能を利用してご提示ください。 あとhello.php on line 23 はどこになりますか? せっかく行数が提示されていてもコードがつまみでは状況把握できません
m.ts10806

2020/06/02 11:50 編集

あと、そのNoticeはどの操作の時に出ましたか?
thyda.eiqau

2020/06/02 11:51

おそらくPOSTで送信するデータにhelloを含めなかったときに、ご提示のエラーとともに「残念です。」が表示される(helloを含めるとエラーは出ない)のだと思いますが、あっていますか? 状況はできるかぎり詳細・性格に提示してください。
thyda.eiqau

2020/06/02 11:52

おっと、かぶった。私の質問はm.ts10806さんの「そのNoticeはどの操作の時に出ましたか?」と同じです。発生する条件をご提示くださいという意図です。
ryuuji_n

2020/06/02 12:09

m.ts10806 様 thyda.eiqau 様 ありがとうございます。 不足していた情報、code機能などを利用しました。 なぜ文字列'hello'ではエラーがでず、文字列'noHello'ではエラーが出るのかがやはりわからないです。 データの送信はインプットタグのtypeをsubmitにしてnameの部分に'hello'、'noHello'とそれぞれ設定している状態です。 質問文も編集しなおしましたので、お手数ですがご回答いただけたら幸いです。
m.ts10806

2020/06/02 13:20

>なぜ文字列'hello'ではエラーがでず、文字列'noHello'ではエラーが出るのかがやはりわからないです。 この理由を回答として投稿していますので、確認しておいてください。
guest

回答2

0

仕様なのですけど、SUBMITは押したボタンの情報しか送信しないようになってます。

html

1<form method="post"> 2<input type="submit" name="a" value="1"> 3<input type="submit" name="b" value="2"> 4<input type="submit" name="c" value="3"> 5<input type="submit" name="d" value="4"> 6<input type="submit" name="e" value="5"> 7 8</form>

php

1<?php 2var_dump($_POST);

1を押したら下記だけがきます。

php

1array(1) { ["a"]=> string(1) "1" }

ですので、今回のようなパターンは同名で良いかと思います。

html

1 <input type="submit" name="send" value="出会った。"> 2 <input type="submit" name="send" value="買わない。">

あとはsendを受け取り、その値で分岐。

投稿2020/06/02 12:47

m.ts10806

総合スコア80850

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

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

m.ts10806

2020/06/02 13:21

この仕様を逆手に取れば色々な実装が可能になりますね。
ryuuji_n

2020/06/02 13:22

m.ts10806 様 ご回答ありがとうございます。 はずかしながらPHPをはじめて3日目ということもあり、var_dump()の意味を調べていたら返信が遅れてしまいました。 試してみたことろ 買わない。を選択した場合は array(1) { ["noHello"]=> string(15) "買わない。" } 出会った。を選択した場合は array(1) { ["hello"]=> string(15) "出会った。" } がきました。 name属性が共通であってもvalue属性の違いで分岐が出来るわけですね。 var_dump()を使えば詳細に送られてきたデータが分かるを知れたので、いろいろな方法でどういったデータが送られてくるのか試してみようと思いました。 また質問をする際もよろしくお願いします。 ありがとうございました。
m.ts10806

2020/06/02 13:28 編集

「デバッグ」を覚えましょう。 var_dump()はそのデバッグで使われる機能の筆頭です。 デバッグとは、何か問題が起きた時に、処理やデータを追って原因を探ることです。 PHP初心者が覚えるべきは下記3つ。 ・エラーメッセージをよく確認すること、読むこと ・デバッグをすること ・PHPマニュアルを活用すること これができればすぐ初心者から脱せますし、質問することなく解決できるようになります。 特に初期の問題のほとんどは出尽くしているので、探せば幾らでも出てくるようなものばかりです。過去質問を探すこともしましょう。 適切なキーワードの選定も覚えた方が良いですね。
ryuuji_n

2020/06/02 13:40

m.ts10806 様 お世話になっています。 ・エラーメッセージをよく確認すること、読むこと ・デバッグをすること ・PHPマニュアルを活用すること 教えてもらったこの3つを元に勉強していこうと思います。 エラーメッセージがデバッグができるチャンスだと思って、 すぐ質問せずにPHPマニュアルで答えを探して自己解決できるようにしてみます。 初心者から脱するための考え方まで教えていただいて、本当にありがとうございました。
m.ts10806

2020/06/02 13:44

>初心者から脱するための考え方まで教えていただいて、本当にありがとうございました。 なぜわざわざ書くかと言うと、この3つが出来てない人、意識できない人がずっとteratailで初心者のまま成長してないのが丸わかりな質問を繰り返しているからなんですね。 実はPHP以外でも同じようなことをずっとアドバイスとして書いてきてますが、重要性が分かってな人はずっと初心者ですね。 少しコメントを見た感じだと、ryuuji_nさんは意図もしっかりくみ取ってくれていて考える力もありそうなので、頑張ってほしいと思います。
ryuuji_n

2020/06/02 14:00

m.ts10806 様 「問題が出る→検証する→改良する」と繰り返し基礎力を上げて、本当に難しい問題を先輩達とteratailなどで考えあえるレベルに到達できるよう頑張ります。 ありがとうございました。
guest

0

ベストアンサー

postデータは一度変数に受けることをお勧めします

PHP

1<?PHP 2$hello=filter_input(INPUT_POST,"hello"); 3$nohello=filter_input(INPUT_POST,"noHello"); 4?> 5 6<form method="post"> 7 <input type="submit" name="hello" value="出会った。"> 8 <input type="submit" name="noHello" value="買わない。"> 9</form> 10 11<?php 12class Bike250{ 13 public $name; 14 public $type; 15 public function __construct($name,$type){ 16 $this -> name = $name; 17 $this -> type = $type; 18 } 19} 20$ninja = new Bike250('ninja250','sports'); 21$z = new Bike250('z250','naked'); 22if(!is_null($hello)){ 23 echo $hello."<p>こんにちは{$ninja -> type}タイプバイク、{$ninja -> name}です。</p>"; 24}elseif(!is_null($nohello)){ 25 echo $nohello. "<p>残念です。</p>"; 26} 27?>

投稿2020/06/02 12:33

yambejp

総合スコア114829

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

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

ryuuji_n

2020/06/02 12:44

yambejp 様 ご回答ありがとうございます。 無事エラーが消えました。 初めてみる記述がいくつかあるので、このコードをもとに勉強してみます。 また質問させていただく際はよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問