バリデーションについて質問があります。
私は現在、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>
回答2件
あなたの回答
tips
プレビュー