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

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

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

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

PHP

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

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

解決済

2回答

1821閲覧

php バリデーションの適用

I_d

総合スコア28

POST

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

PHP

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

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

0グッド

0クリップ

投稿2021/12/03 09:40

バリデーションについて質問があります。
私は現在、phpのバリデーション付きサンプルサイトを作成中なのです。

ゴールとしては
contact.phpの入力フォームに必要事項(氏名、フリガナ、電話番号、メールアドレス、問い合わせ内容)を記入して
confirm.phpに渡す事です。また必要事項にエラーがある場合はバリデーションが適用されcontact.phpに戻ることも必須です。

しかし入力フォームのaction欄にファイルを指定した時にバリデーションは適用されず、次のcontact.phpのページに行ってしまいます。action欄に送り先ファイルを指定せず空の場合は、バリデーションが適用される状況です。
解決策としてはバリデーションの部分にreturnをつけたのですが、その場合にはページ全体が白くなってしまいます。

ご教示いただければ幸いです。
よろしくお願い致します。

contact.php

1<?php 2$error = []; 3if ($_SERVER['REQUEST_METHOD'] === 'POST') { 4 if ($_POST['name'] == "" || mb_strlen($_POST['name']) > 10) { 5 $error['name'] = 1; 6 } 7 if ($_POST["hurigana"] == "" || mb_strlen($_POST['hurigana']) > 10) { 8 $error['hurigana'] = 1; 9 } 10 if ($_POST["tel"] == "" || preg_match('/\A[0-9]+\z/', $_POST["tel"])) { 11 $error['tel'] = 1; 12 } 13 if ($_POST["email"] == "" || !filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)) { 14 $error['email'] = 1; 15 } 16 if ($_POST["message"] == "") { 17 $error['message'] = 1; 18 } 19} 20?> 21 22<!DOCTYPE html> 23<html> 24<head> 25 <meta charset="UTF-8"> 26 <title>Lesson Sample Site</title> 27 <link rel="stylesheet" type="text/css" href="base-form.css"> 28</head> 29<body> 30 <?php include("header.html");?> 31 <div class="overlay"></div> 32 <div class="modal"> 33 <p>ログイン</p> 34 <form action="main-site.php" method="post" class="form"> 35 <input class = "send" type = "email" name = "mail" placeholder="メールアドレス"> 36 <input class = "send" type = "password" name = "pass" placeholder="パスワード"> 37 <input class = "submit" type = "submit" name="submit" value = "送信"> 38 </form> 39 <div class="sns"> 40 <div class="icon"> 41 <a href="main-site.php"><img src="img/twitter.png"></a> 42 </div> 43 <div class="icon"> 44 <a href="main-site.php"><img src="img/fb.png"></a> 45 </div> 46 <div class="icon"> 47 <a href="main-site.php"><img src="img/google.png"></a> 48 </div> 49 <div class="icon"> 50 <a href="main-site.php"><img src="img/apple.png"></a> 51 </div> 52 </div> 53 </div> 54 55<!--入力フォーム----------------------------------------------------------------------------> 56 <div class="form-box"> 57 <div class="title"> 58 <p>お問い合わせ</p> 59 </div> 60 <div class="framework"> 61 <div class="exp"> 62 <p>下記の項目をご記入の上送信ボタンを押してください</p> 63 </div> 64 65 <div class="exp2"> 66 <p>送信頂いた件につきましては、当社より折り返しご連絡を差し上げます。<br> 67 なお、ご連絡までに、お時間を頂く場合もございますので予めご了承ください。<br> 68 <span>*</span>は必須項目となります。</p> 69 </div> 70 71 <form action="confirm.php" method="POST" id="form"> 72 <div> 73 <label for="name">氏名<span>*</span><br></label> 74 <?php 75 if (isset($error['name'])) { 76 echo '<font color="red">氏名は必須入力です。10文字以内でご入力ください。</font>'; 77 } 78 ?> 79 <input type="text"name="name"id="name"placeholder="山田太郎" value=""> 80 </div> 81 82 <div> 83 <label for="hurigana">フリガナ<span>*</span><br></label> 84 <?php 85 if (isset($error['hurigana'])) { 86 echo '<font color="red">フリガナは必須入力です。10文字以内でご入力ください。</font>'; 87 } 88 ?> 89 <input type="text" name="hurigana" id="hurigana" placeholder="ヤマダタロウ" value=''> 90 </div> 91 92 <div> 93 <label for="tel">電話番号<span>*</span><br></label> 94 <?php 95 if (isset($error['tel'])) { 96 echo '<font color="red">電話番号は0-9の数字のみでご入力ください</font>'; 97 } 98 ?> 99 <input type="text" name="tel" id="tel" placeholder="09012345678" value=''> 100 </div> 101 102 <div> 103 <label for="mail">メールアドレス<span>*</span><br></label> 104 <?php 105 if (isset($error['email'])) { 106 echo ' <font color="red">メールアドレスは正しくご入力ください</font>'; 107 } 108 ?> 109 <input type="text" name="email" id="email" placeholder="test@test.co.jp" value=''> 110 </div> 111 112 <div class="free"> 113 <label for="free">お問い合わせ内容をご記入ください<span>*</span><br></label> 114 <?php 115 if (isset($error['message'])) { 116 echo '<font color="red">お問い合わせ内容は必須入力です。</font>'; 117 } 118 ?> 119 <textarea name="message" id="message" rows="4" cols="40"></textarea> 120 </div> 121 122 <div id="submit"> 123 <button type="submit" name="send" value="送信する">送信する</button> 124 </div> 125 </form> 126 </div> 127 </div> 128 129<!--入力フォーム----------------------------------------------------------------------------> 130 <?php include("footer.html");?> 131 <script src="jquery-3.6.0.min.js" type="text/javascript"></script> 132 <script src="script.js" type="text/javascript"></script> 133</body> 134</html> 135 136 137```confirm.php 138<!--PHPプログラム-----------------------------------------------------------------> 139<?php 140session_start(); 141 142$_SESSION["name"] = htmlspecialchars($_POST["name"], ENT_QUOTES, "UTF-8"); 143$_SESSION["hurigana"] = htmlspecialchars($_POST["hurigana"], ENT_QUOTES, "UTF-8"); 144$_SESSION["tel"] = htmlspecialchars($_POST["tel"], ENT_QUOTES, "UTF-8"); 145$_SESSION["email"] = htmlspecialchars($_POST["email"], ENT_QUOTES, "UTF-8"); 146$_SESSION["message"] = htmlspecialchars($_POST["message"], ENT_QUOTES, "UTF-8"); 147$_SESSION["send"] = $_POST["send"]; 148 149?> 150<!--PHPプログラム-----------------------------------------------------------------> 151<!DOCTYPE html> 152<html> 153<head> 154 <meta charset="UTF-8"> 155 <title>Lesson Sample Site</title> 156 <link rel="stylesheet" type="text/css" href="base-form.css"> 157</head> 158<body> 159<?php include("header.html");?> 160<div class="overlay"></div> 161<div class="modal"> 162 <p>ログイン</p> 163 <form action="main-site.php" method="post" class="form"> 164 <input class = "send" type = "email" name = "mail" placeholder="メールアドレス"> 165 <input class = "send" type = "password" name = "pass" placeholder="パスワード"> 166 <input class = "submit" type = "submit" name="submit" value = "送信"> 167 </form> 168 <div class="sns"> 169 <div class="icon"> 170 <a href="main-site.php"><img src="img/twitter.png"></a> 171 </div> 172 <div class="icon"> 173 <a href="main-site.php"><img src="img/fb.png"></a> 174 </div> 175 <div class="icon"> 176 <a href="main-site.php"><img src="img/google.png"></a> 177 </div> 178 <div class="icon"> 179 <a href="main-site.php"><img src="img/apple.png"></a> 180 </div> 181 </div> 182 </div> 183<div class="form-box"> 184 <div class="title"> 185 <p>お問い合わせ</p> 186 </div> 187 <div class="framework"> 188 <div class="exp2"> 189 <p>下記の内容をご確認の上送信ボタンを押してください。<br> 190 内容を訂正する場合は戻るを押してください。</p> 191 </div> 192 <form action="complete.php" method="post"> 193 <div> 194 <label id="ques">氏名</label> 195 <p id="res"><?php echo $_SESSION["name"];?></p> 196 </div> 197 198 <div> 199 <label id="ques">ふりがな</label> 200 <p id="res"><?php echo $_SESSION["hurigana"];?></p> 201 </div> 202 203 <div> 204 <label id="ques">電話番号</label> 205 <p id="res"><?php echo $_SESSION["tel"];?></p> 206 </div> 207 208 <div> 209 <label id="ques">メールアドレス</label> 210 <p id="res"><?php echo $_SESSION["email"];?></p> 211 </div> 212 213 <div> 214 <label id="ques">お問い合わせ内容</label> 215 <p id="res"><?php echo $_SESSION["message"];?></p> 216 </div> 217 <div class="btn"> 218 <input type="submit" value="送信"> 219 <input type="button" onclick="history.back()" value="戻る"> 220 </div> 221 </form> 222 </div> 223</div> 224<?php include("footer.html");?> 225<script src="jquery-3.6.0.min.js" type="text/javascript"></script> 226<script src="script.js" type="text/javascript"></script> 227</body> 228</html>

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

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

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

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

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

guest

回答2

0

ベストアンサー

しかし入力フォームのaction欄にファイルを指定した時にバリデーションは適用されず、次のcontact.phpのページに行ってしまいます。

PHPでのバリデーションは受け取った側で行う処理です。

contact.phpからconfirm.phpに渡すのであれば、バリデーション処理を書くべきはconfirm.phpの側です。

投稿2021/12/03 09:44

編集2021/12/03 09:44
maisumakun

総合スコア145183

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

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

I_d

2021/12/21 03:35

ありがとうございます。 ページを変更し、書き直したところ実行ができました。
guest

0

formのaction属性に指定した先に送信しますので、
自身でバリデーションしたければ自身に送信してバリデーションしてOKだったらリダイレクトすることになります(入力値はセッションに保持しないと次の画面では使えませんが)

結局は「バリデーションをどこで行ってどういう処理の流れにしたいか」です。

投稿2021/12/03 11:09

m.ts10806

総合スコア80850

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

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

I_d

2021/12/21 03:36

そうなのですね。 リダイレクトについては初めて聞いたことなので、是非参考にさせて頂きます。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問