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

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

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

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

Q&A

解決済

2回答

246閲覧

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

neruhi

総合スコア16

PHP

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

0グッド

0クリップ

投稿2018/06/01 03:40

編集2018/06/01 06:22

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

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

php

1<?php 2 $errors = array(); 3 4 if(isset($_POST['submit']) && $_POST['submit'] === "submit"){ 5 $pass = $_POST['pass']; 6 7 if($pass > 90 && $pass <= 99){ 8 $errors['pass'] = "該当する番号がありません。"; 9 }elseif ($pass < 10) { 10 $errors['pass'] = "2桁で入力してください。"; 11 }elseif (preg_match("/^[0-9]+$/", $pass)) { 12 $pass = $pass; 13 }else{ 14 $errors['pass'] = "半角数字のみで入力してください。"; 15 } 16 } 17?> 18 19<html> 20 <head> 21 </head> 22 <body> 23 <form action="login.php" method="post"> 24 <input type="password" name="pass" size="20" maxlength="2" placeholder="(例)10" required > 25 <?php 26 foreach ($errors as $message) { 27 echo $message; 28 } 29 ?> 30 <input type="submit" value="submit" name="submit"> 31 </form> 32 </body> 33</html> 34

php

1<?php 2 session_start(); 3 4 // ログインボタンが押されたかを判定 5 if (isset($_POST['submit'])) { 6 // passがaか判定 7 if ($_POST['pass'] > 9 and $_POST['pass'] <= 40){ 8 // パスワード内容をセッションに保存 9 $_SESSION['pass'] = $_POST['pass']; 10 header('Location: http://localhost/Task3/a.php'); 11 exit; 12 // passがbか判定 13 }elseif ($_POST['pass'] > 40 and $_POST['pass'] <= 70) { 14 // パスワード内容をセッションに保存 15 $_SESSION['pass'] = $_POST['pass']; 16 header('Location: http://localhost/Task3/b.php'); 17 exit; 18 // passがcか判定 19 }elseif ($_POST['pass'] > 70 and $_POST['pass'] <= 90) { 20 // パスワード内容をセッションに保存 21 $_SESSION['pass'] = $_POST['pass']; 22 header('Location: http://localhost/Task3/c.php'); 23 exit; 24 }else{ 25 header('Location: http://localhost/Task3/index.php'); 26 exit; 27 } 28} 29?> 30 31

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

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

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

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

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

y_waiwai

2018/06/01 03:45

質問はなんでしょうか
neruhi

2018/06/01 03:58

どのようにすればエラーメッセージが表示されますでしょうか。
退会済みユーザー

退会済みユーザー

2018/06/01 04:02

複数のphpコードを掲載する時は、ファイル名も添えてほしいです。ページがどう遷移するのかファイル名も加えて説明があるとわかりやすいですし。
neruhi

2018/06/01 04:08

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

2018/06/01 04:48

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

2018/06/01 06:20

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

回答2

0

ベストアンサー

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

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

投稿2018/06/01 03:47

maisumakun

総合スコア145183

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

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

0

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

PHP

1<?php 2$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]]); 3var_dump($pass); 4?> 5<form method="post"> 6<input type="text" name="pass" size="20" > 7<input type="submit" value="submit"> 8</form>
  • 何も送られてこないときはnull
  • 何か送られてきたらintだと認識し、0から99の範囲以外は-1をかえす

投稿2018/06/01 04:29

編集2018/06/01 04:32
yambejp

総合スコア114812

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問