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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

Q&A

解決済

2回答

3401閲覧

php フォームの条件式 $_POSTの受け渡しがされない。

aka88533383

総合スコア10

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

0グッド

0クリップ

投稿2020/01/20 05:42

編集2020/01/20 08:34

質問内容

こちらのコードは初学者が0からスクラッチ開発を体験する為の書籍を元にしたコードで、
初学者が理解しやすいよう実用的ではない実装がされているかと思います。
ですがとりあえず書籍の内容通り進め、クラッチ開発の流れを理解することに重きを置きたいので、
ひとまずエラーの解消法のみをお教えいただけると幸いです。

staff_add.phpで名前とパスワード2項目を埋め「OK」を押すとstaff_add_check.phpに飛び、
下の画面になります。
staff_add_check.php画面1

次のシートに飛ぶため、「OK」を押すと次の画面の表示になります。

staff_add_check.php画面2

一度はif($staff_name==''||$staff_pass==''||$staff_pass!==$staff_pass2){}
の条件式をクリアしelseの処理が実行されたのにも関わらず、
「OK」を押すとなぜ'pass2'が受け取れていない事になってしまうのでしょうか。

該当のソースコード

staff_add.php

html

1<html> 2 <head> 3 <meta charset="UTF=8"> 4 <title>タイトル</title> 5 </head> 6 <body> 7 スタッフ追加<br /> 8 <br /> 9 <form method="post" action="staff_add_check.php"> 10 スタッフ名を入力してください。<br /> 11 <input type="text" name="name" style="width:200px"><br /> 12 パスワードを入力してください。<br /> 13 <input type="password" name="pass" style="width:100px"><br /> 14 パスワードをもう一度入力してください。<br /> 15 <input type="password" name="pass2" style="width:100px"><br /> 16 <br /> 17 <input type="button" onclick="history.back()" value="戻る"> 18 <input type="submit" value="OK"> 19 </form> 20 </body> 21</html>

staff_add_check.php

html

1<!DOCTYPE html> 2<html> 3 <head> 4 <meta charset="UTF=8"> 5 <title>タイトル</title> 6 </head> 7 <body> 8 <?php 9 $staff_name=$_POST['name']; 10 $staff_pass=$_POST['pass']; 11 $staff_pass2 = filter_input(INPUT_POST,'pass2'); 12 13 if($staff_name==''){ 14 print'スタッフ名が入力されていません。</br>'; 15 } else { 16 print 'スタッフ名:'; 17 print $staff_name; 18 print '<br/>'; 19 } 20 21 if($staff_pass==''){ 22 print'パスワードが入力されていません。<br />'; 23 } 24 if($staff_pass2==''){ 25 print'パスワード2が入力されていません。<br />'; 26 } 27 28 if($staff_pass!==$staff_pass2){ 29 print'パスワードが一致しません。<br />'; 30 } 31 32 if($staff_name==''||$staff_pass==''||$staff_pass!==$staff_pass2){ 33 print'<form>'; 34 print'<input type="button" onclick="history.back()" value="戻る">'; 35 print'</form>'; 36 } else { 37 $staff_pass=md5($staff_pass); 38 print'<form method="post" action="staff_add_done.php">'; 39 print'<input type="hidden" name="name" value="'.$staff_name.'">'; 40 print'<input type="hidden" name="pass" value="'.$staff_pass.'">'; 41 print'<br />'; 42 print'<input type="button" onclick="history.back()" value="戻る">'; 43 print'<input type="submit" value="OK">'; 44 print'</form>'; 45 } 46 ?> 47 </body> 48</html>

補足情報①

staff_add_check.phpのpass2だけfilter_inputで受け取っているのは、
他と同じ記述方法だと、以下のエラーが発生した為です。

イメージ説明

エラーを解消すべく調べ、こちらを参考に致しました。
PHPのNotice: Undefined indexについて

補足情報②

mac book proを使用。
開発環境 / MAMP
My SQL / 5.7.26
PHP / 7.4.1

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

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

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

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

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

m.ts10806

2020/01/20 05:45

なぜpass2だけfilter_inputで受け取っているのでしょうか。 あと前の質問にてhtmlspecialcharsを導入する場所についての指摘もあったかと思いますが、読まれてないのですか? 結構大事なんですが。
aka88533383

2020/01/20 06:26

>なぜpass2だけfilter_inputで受け取っているのでしょうか。 こちらの理由は補足情報①に追加させて頂きました。使い方が違うようでしたらご指摘下さい。 >あと前の質問にてhtmlspecialcharsを導入する場所についての指摘もあったかと思いますが、読まれてないのですか? 読ませて頂きましたが、修正し忘れておりました。こちらの修正もさせて頂きます。
m.ts10806

2020/01/20 06:28

回答した通り、この作りではfilter_inputの結果はnullになるので結果は一緒です。 エラーを分かりにくくなるように隠蔽しただけですね。
aka88533383

2020/01/20 06:36

補足情報①のエラーを解消する正しい記述はなんなのでしょうか??
m.ts10806

2020/01/20 06:42

回答した通り、そもそもhtml間違ってます。 回答読んでそちらへ。
guest

回答2

0

ベストアンサー

form内の属性指定がaxtion となっているのでaction属性には初期値である「自身」が反映されるわけですが、
自身に送信するので送信されるフォームにはpass2がないですよね。
なので、staff_add_check.php再実行された形となり、pass2が送信されてないのでチェックにかかる。

MDN:フォームデータの送信

属性を指定しない場合は、 <form> 要素はフォームが表示されているページ自身に対してデータを送信します。


以前の質問で指摘したhtmlspecialcharsの使いどころについても反映されてませんのでそちらをあわせて対応してください。
なんとなくfilter_input使っていても活かせません。PHPマニュアルできちんと機能を確認してください。

投稿2020/01/20 05:50

編集2020/01/20 05:59
m.ts10806

総合スコア80850

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

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

m.ts10806

2020/01/20 06:52

他にも不味い実装がたんまりありますけど、それはまた次の段階で。
aka88533383

2020/01/20 08:23

ご回答ありがとうございます。 不味い実装なのかも知れませんが、とりあえずエラーを無くし次に進める為のアドバイスをしていただけると幸いです。
aka88533383

2020/01/20 08:32

お教えいただいたhtmlの部分の修正とhtmlspecialcharsを削除しました。
aka88533383

2020/01/20 08:39

htmlの部分の修正とfilter_inputでエラーもなく次び進めました!ありがとうございます!
aka88533383

2020/01/20 08:41

誤解をされるかも知れないので...。 ご回答頂き大変勉強させていただいておりますので、私は低評価しておりません。
m.ts10806

2020/01/20 08:56

いえ。熱心なアンチが定期的に沸くので気にしてません(邪魔とは思います) 理由も書かずに済ませられるような回答って基本的にはしませんし、この手の回答に理由書かずに済ませる人ってたいていまともな人ではないです。 あと、filter_inputはむしろ使ってください。コメントでは「エラーが分かりにくくなるように」とは書きましたが、きちんと意図を理解して使うのでしたらむしろ推奨される機能なので。 >htmlspecialcharsを削除しました。 「出力時」には必須です。XSSの脆弱性があります。
guest

0

流れ的にはこんな感じ

投稿2020/01/20 05:55

yambejp

総合スコア114829

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

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

yambejp

2020/01/20 06:07

<?PHP $staff_name = filter_input(INPUT_POST,'name'); $staff_pass = filter_input(INPUT_POST,'pass'); $staff_pass2 = filter_input(INPUT_POST,'pass2'); $flg=true; if(!is_null($staff_name)){ if($staff_name==''){ print'スタッフ名が入力されていません。</br>'; }elseif($staff_pass==''){ print'パスワードが入力されていません。<br />'; }else if($staff_pass2==''){ print'パスワード2が入力されていません。<br />'; }elseif($staff_pass!==$staff_pass2){ print'パスワードが一致しません。<br />'; } else { $flg=false; } if($flg){ print'<form>'; print'<input type="button" onclick="history.back()" value="戻る">'; print'</form>'; } else { $staff_pass=md5($staff_pass); print "name:{$staff_name}<br>\n"; print "pass:{$staff_pass}<br>\n"; } } ?>
yambejp

2020/01/20 06:07

<hr> スタッフ追加<br /> <br /> <form method="post"> スタッフ名を入力してください。<br /> <input type="text" name="name" style="width:200px"><br /> パスワードを入力してください。<br /> <input type="password" name="pass" style="width:100px"><br /> パスワードをもう一度入力してください。<br /> <input type="password" name="pass2" style="width:100px"><br /> <br /> <input type="button" onclick="history.back()" value="戻る"> <input type="submit" value="OK"> </form>
yambejp

2020/01/20 06:09 編集

・とりあえず自分に投げるようにしてあります。 ・filter_inputは必ず処理してください ・確定処理をhiddenで渡すのはやめましょう (セッションで渡してください)
m.ts10806

2020/01/20 06:43

>・確定処理をhiddenで渡すのはやめましょう ここ大事ですね。書くの忘れてた…
aka88533383

2020/01/20 08:29

ご回答ありがとうございます! 参考にさせて頂きます!
aka88533383

2020/01/20 08:39

htmlの部分の修正とfilter_inputでエラーもなく次び進めました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問