質問: ### 質問内容 こちらのコードは初学者が0からスクラッチ開発を体験する為の書籍を元にしたコードで、 初学者が理解しやすいよう実用的ではない実装がされているかと思います。 ですがとりあえず書籍の内容通り進め、クラッチ開発の流れを理解することに重きを置きたいので、 ひとまずエラーの解消法のみをお教えいただけると幸いです。 staff_add.phpで名前とパスワード2項目を埋め「OK」を押すとstaff_add_check.phpに飛び、 下の画面になります。 ![staff_add_check.php画面1](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/73370b7bedd09c5c0e68afbc4d07b711.png) 次のシートに飛ぶため、「OK」を押すと次の画面の表示になります。 ![staff_add_check.php画面2](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/8c64e90165f7fc976a160d3ec6fd1590.png) 一度はif($staff_name==''||$staff_pass==''||$staff_pass!==$staff_pass2){} の条件式をクリアしelseの処理が実行されたのにも関わらず、 「OK」を押すとなぜ'pass2'が受け取れていない事になってしまうのでしょうか。 ### 該当のソースコード **staff_add.php** ``` タイトル スタッフ追加 スタッフ名を入力してください。 パスワードを入力してください。 パスワードをもう一度入力してください。 ``` **staff_add_check.php** ``` タイトル '; } else { print 'スタッフ名:'; print $staff_name; print ''; } if($staff_pass==''){ print'パスワードが入力されていません。'; } if($staff_pass2==''){ print'パスワード2が入力されていません。'; } if($staff_pass!==$staff_pass2){ print'パスワードが一致しません。'; } if($staff_name==''||$staff_pass==''||$staff_pass!==$staff_pass2){ print''; print''; print''; } else { $staff_pass=md5($staff_pass); print''; print''; print''; print''; print''; print''; print''; } ?> ``` ### 補足情報1 staff_add_check.phpのpass2だけfilter_inputで受け取っているのは、 他と同じ記述方法だと、以下のエラーが発生した為です。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/8a61d2c953cc49aed90f3c347cf2c891.png) エラーを解消すべく調べ、こちらを参考に致しました。 PHPのNotice: Undefined indexについて ### 補足情報2 mac book proを使用。 開発環境 / MAMP My SQL / 5.7.26 PHP / 7.4.1
回答: form内の属性指定がaxtion となっているのでaction属性には初期値である「自身」が反映されるわけですが、 自身に送信するので送信されるフォームにはpass2がないですよね。 なので、staff_add_check.php再実行された形となり、pass2が送信されてないのでチェックにかかる。 > > MDN:フォームデータの送信 > > 属性を指定しない場合は、 要素はフォームが表示されているページ自身に対してデータを送信します。 > > > 以前の質問で指摘したhtmlspecialcharsの使いどころについても反映されてませんのでそちらをあわせて対応してください。 なんとなくfilter_input使っていても活かせません。PHPマニュアルできちんと機能を確認してください。