前提・実現したいこと
問い合わせフォームを作っていて、PHPでバリデーションを行っています。
バリデーションのみで警告メッセージ(必須入力です等)表示まではできました。
①入力が正しくない場合は警告メッセージを表示
②正しく入力できた場合はconfirm.php(送信確認の表示ページ)へ送信
としたいです。
発生している問題・エラーメッセージ
formタグの action = <?php echo htmlspecialchars($_SERVER["PHP_SELF"] , ENT_QUOTES);>
とした際にconfirm.phpへ飛べません
警告メッセージを出さない際にconfirm.phpへ飛ぶが知りたいです。(form actionの分岐方法)
エラーメッセージ
該当のソースコード
PHP
ソースコード <?php $name = $kana = $tel = $mail = $about = ""; $error = 0; function vali($data){ $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data , ENT_QUOTES); return $data; } if($_SERVER["REQUEST_METHOD"] == "POST"){ $name = vali($_POST["name"]); $kana = vali($_POST["kana"]); $tel= vali($_POST["tel"]); $mail = vali($_POST["mail"]); $about= vali($_POST["about"]); } ?> <form action= <?php if($_SERVER["REQUEST_METHOD"] != "POST"){ echo $_SERVER["PHP_SELF"]; } if($_SERVER["REQUEST_METHOD"] == "POST"){ if($error > 0){ echo htmlspecialchars($_SERVER["PHP_SELF"] , ENT_QUOTES); }else if ($error == 0){echo "confirm.php";}} <dl> <dt> <label for="name"><h2>お名前<span>*</span></h2></label> </dt> <dd> if($_SERVER["REQUEST_METHOD"] == "POST"){ if (empty($_POST['name']) || mb_strlen($_POST['name']) > 10){ echo"お名前は必須入力です。10文字以内でご入力ください。"; } } ?> <input type=text name="name" placeholder="山田太郎" id="name" size="100" value=<?php echo "$name"; ?> > </dd> <dt> <label for="kana"><h2>フリガナ<span>*</span></h2></label> </dt> <dd> <?php if($_SERVER["REQUEST_METHOD"] == "POST"){ if (empty($_POST['kana']) || mb_strlen($_POST['kana']) > 10){ $error = 1; echo "フリガナは必須入力です。10文字以内でご入力ください。"; } } ?> <input type="text" name="kana" placeholder="ヤマダタロウ" id="kana" size="100" value=<?php echo "$kana"; ?>> </dd> <label><dt> <label for="tel"><h2>お電話番号</h2></label> </dt> <dd> <?php if($_SERVER["REQUEST_METHOD"] == "POST"){ if (!empty($_POST['tel']) && !preg_match("/[0-9]*/",$_POST['tel'])) { $error = 1; echo "電話番号は0~9の数字のみでご入力ください。"; } } ?> <input type="text" name="tel" placeholder="1234567890" id="tel" size="100" value=<?php echo "$tel"; ?>> </dd> <dt> <label for="mail"><h2>メールアドレス<span>*</span></h2></label> </dt> <dd> <?php if($_SERVER["REQUEST_METHOD"] == "POST"){ if(empty($_POST['mail']) || !preg_match("/^[a-z0-9]+[a-zA-Z0-9.-_]+@[a-zA-Z0-9.-_]+$/",$_POST['mail'])){ $error = 1; echo "メールアドレスは正しくご入力ください。"; } } ?> <input type="text" name="mail" placeholder="mail@mail.com" id="mail" size="100" value=<?php echo "$mail"; ?>> </dd> </dl> <label for="submit"><h2>内容をご記入ください<span>*</span></h2></label> <?php if($_SERVER["REQUEST_METHOD"] == "POST"){ if(empty($_POST['about'])){ $error = 1; echo "内容は必須入力です。"; } } ?> <textarea name="about" rows="8" cols="100" value=<?php echo "$about"; ?>></textarea> <button type="submit" name="submit" class ="btn">送信</button> </form>
試したこと
1
上記のようにaction にifを使用し、
警告メッセージを出すたびにエラーをカウントし、$_POSTの際にはエラーの数値に応じてactionを分岐させるよう試みましたが、うまくいきません。(POST時に$errorも初期化されている?)
2
</form>の前にifを使用しエラーカウントに応じて$xに値を入れて、$xに応じてactionを分岐させるよう試みましたが、POST時に$xが見つからないと出てしまいました。 if($error > 0){ $x = 1; }else{$x =0;}ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/11/21 09:00
2021/11/21 09:42 編集
退会済みユーザー
2021/11/25 10:45