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

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

ただいまの
回答率

90.52%

  • PHP

    20331questions

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

バリデーションが出力されません。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 136

neruhi

score 8

1つ目のコードのバリデーションが表示されず、1桁の数字または91〜99の数字をパスワードに入力するとフォーム画面に戻ってしまいます。
上:index.php
下:login.php

よろしくお願い致します。

<?php
 $errors = array();

 if(isset($_POST['submit']) && $_POST['submit'] === "submit"){
     $pass = $_POST['pass'];

     if($pass > 90 && $pass <= 99){
         $errors['pass'] = "該当する番号がありません。";
     }elseif ($pass < 10) {
         $errors['pass'] = "2桁で入力してください。";
     }elseif (preg_match("/^[0-9]+$/", $pass)) {
         $pass = $pass;
     }else{
         $errors['pass'] = "半角数字のみで入力してください。";
     }
 }
?>

<html>
    <head>
    </head>
    <body>
        <form action="login.php" method="post">
            <input type="password" name="pass" size="20" maxlength="2" placeholder="(例)10" required >
            <?php
                foreach ($errors as $message) {
                echo $message;
                }
            ?>
            <input type="submit" value="submit" name="submit">
        </form>
    </body>
</html>
<?php
    session_start();

    // ログインボタンが押されたかを判定
    if (isset($_POST['submit'])) {
        // passがaか判定
        if ($_POST['pass'] > 9 and $_POST['pass'] <= 40){
            // パスワード内容をセッションに保存
            $_SESSION['pass'] = $_POST['pass'];
            header('Location: http://localhost/Task3/a.php');
            exit;
        // passがbか判定
        }elseif ($_POST['pass'] > 40 and $_POST['pass'] <= 70) {
            // パスワード内容をセッションに保存
            $_SESSION['pass'] = $_POST['pass'];
            header('Location: http://localhost/Task3/b.php');
            exit;
        // passがcか判定
        }elseif ($_POST['pass'] > 70 and $_POST['pass'] <= 90) {
            // パスワード内容をセッションに保存
            $_SESSION['pass'] = $_POST['pass'];
            header('Location: http://localhost/Task3/c.php');
            exit;
    }else{
        header('Location: http://localhost/Task3/index.php');
        exit;
    }
}
?>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • neruhi

    2018/06/01 13:08

    追記致しました。よろしくおねがいたします。

    キャンセル

  • mts10806

    2018/06/01 13:48

    「エラーメッセージ」はPHP言語の構文チェックにより出るものか、自身でチェックするコードを書いた上で出力するものか明示されたほうが混乱を招かなくて済みます。後者の場合「バリデーション」という言葉を覚えておくと良いです(意味は調べてください)

    キャンセル

  • neruhi

    2018/06/01 15:20

    ご指摘ありがとうございます。

    キャンセル

回答 2

checkベストアンサー

+1

リダイレクトを行った場合、リダイレクト後は別のリクエストになりますので、$_POSTも新しいリクエストのもの(ふつうにリダイレクトさせると302なのでそもそもGETリクエストとなり、何も来ない)になります。

エラー内容を$_SESSIONで共有するか、リダイレクトさせずに直接フォームを表示させるような構造にしましょう。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

もちろんクライアントサイドである程度のフィルタリングは必要だとして
サーバー側に関してはたとえばこうすると切り分けしやすくなります

<?php
$pass=is_null(filter_input(INPUT_POST,"pass"))?null:filter_input(INPUT_POST,"pass",FILTER_VALIDATE_INT,["options"=>["default"=>-1,"min_range"=>0,"max_range"=>99]]);
var_dump($pass);
?>
<form method="post">
<input type="text" name="pass" size="20" >
<input type="submit" value="submit">
</form>
  • 何も送られてこないときはnull
  • 何か送られてきたらintだと認識し、0から99の範囲以外は-1をかえす

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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

  • PHP

    20331questions

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