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

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

ただいまの
回答率

87.80%

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,524

score 10

質問内容

こちらのコードは初学者が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>
    <head>
        <meta charset="UTF=8">
        <title>タイトル</title>
    </head>
    <body>
        スタッフ追加<br />
        <br />
        <form method="post" action="staff_add_check.php">
            スタッフ名を入力してください。<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>
    </body>
</html>

staff_add_check.php

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF=8">
        <title>タイトル</title>
    </head>
    <body>
        <?php
        $staff_name=$_POST['name'];
        $staff_pass=$_POST['pass'];
        $staff_pass2 = filter_input(INPUT_POST,'pass2');

        if($staff_name==''){
            print'スタッフ名が入力されていません。</br>';
        } else {
            print 'スタッフ名:';
            print $staff_name;
            print '<br/>';
        }

        if($staff_pass==''){
            print'パスワードが入力されていません。<br />';
        }
        if($staff_pass2==''){
            print'パスワード2が入力されていません。<br />';
        }

        if($staff_pass!==$staff_pass2){
            print'パスワードが一致しません。<br />';
        }

        if($staff_name==''||$staff_pass==''||$staff_pass!==$staff_pass2){
            print'<form>';
            print'<input type="button" onclick="history.back()" value="戻る">';
            print'</form>';
        } else {
            $staff_pass=md5($staff_pass);
            print'<form method="post" action="staff_add_done.php">';
            print'<input type="hidden" name="name" value="'.$staff_name.'">';
            print'<input type="hidden" name="pass" value="'.$staff_pass.'">';
            print'<br />';
            print'<input type="button" onclick="history.back()" value="戻る">';
            print'<input type="submit" value="OK">';
            print'</form>';
            }
        ?>
    </body>
</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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2020/01/20 15:28

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

    キャンセル

  • aka88533383

    2020/01/20 15:36

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

    キャンセル

  • m.ts10806

    2020/01/20 15:42

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

    キャンセル

回答 2

checkベストアンサー

+2

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

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


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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/01/20 17:39

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

    キャンセル

  • 2020/01/20 17:41

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

    キャンセル

  • 2020/01/20 17:56

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

    >htmlspecialcharsを削除しました。

    「出力時」には必須です。XSSの脆弱性があります。

    キャンセル

+1

流れ的にはこんな感じ

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/01/20 15:43

    >・確定処理をhiddenで渡すのはやめましょう

    ここ大事ですね。書くの忘れてた…

    キャンセル

  • 2020/01/20 17:29

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

    キャンセル

  • 2020/01/20 17:39

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

    キャンセル

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

  • ただいまの回答率 87.80%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る