PHPでフォームのバリデーションを実装しているのですが、電話番号とメールアドレスで下記のようなエラーが発生するので、それを解消したいです。
##該当のソースコード
contact.php
<form action="confirm.php" method="POST"> <div class="mb-3"> <label>氏名</label><label class="kome">*</label><br> <div class="vali"><?php echo $errors['name']; ?></div> <input type="text" id="f-name" name="name" value="" placeholder="山田太郎"> </div> <div class="mb-3"> <label>フリガナ</label><label class="kome">*</label><br> <div class="vali"><?php echo $errors['kana']; ?></div> <input type="text" id="f-kana" name="kana" value="" placeholder="ヤマダタロウ"> </div> <div class="mb-3"> <label>電話番号</label><br> <div class="vali"><?php echo $errors['tel']; ?></div> <input type="text" id="f-tel" name="tel" value="" placeholder="09012345678"> </div> <div class="mb-3"> <label>メールアドレス</label><label class="kome">*</label><br> <div class="vali"><?php echo $errors['email']; ?></div> <input type="text" id="f-email" name="email" value="" placeholder="test@test.co.jp"> </div> <div class="f-title f-bottom"> <h3>お問い合わせ内容をご記入ください<label class="kome">*</label></h3> </div> <div class="vali"><?php echo $errors['contact']; ?></div> <div class="mb-3"> <textarea id="contact" name="contact" rows="7"></textarea> </div> <input type="hidden" name="csrf_token" value="<?php echo setToken(); ?>"> <button type="submit" class="btn" name="btn_confirm">送信</button> </form>
バリデーション
<?php $errors = []; // 名前の空欄チェック if(empty($_POST['name']) || mb_strlen($_POST['name']) > 10) { $errors['name'] = "名前は必須です。10文字以内で入力してください。"; } // $_SESSION['name'] = htmlspecialchars($_POST['name'], ENT_QUOTES, "UTF-8"); // フリガナの空欄チェック if(empty($_POST['kana']) || mb_strlen($_POST['kana']) > 10) { $errors['kana'] = "フリガナは必須です。フリガナは10文字以内で入力してください"; } // 電話番号のチェック if(isset($_POST['tel'])) { if(!preg_match("/^[0-9]+$/", $_POST['tel'])) { $errors['tel'] = "電話番号は0-9までの数字を入力してください"; } } // 正しいEmailの形式化どうか if(isset($_POST['email'])) { if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { $errors['email'] = "正しいメールアドレスを指定してください"; } } // お問い合わせ内容の空欄チェック if(empty($_POST['contact'])) { $errors['contact'] = "お問い合わせ内容は必須です"; } ?>
contact.phpの100行目
<div class="vali"><?php echo $errors['tel']; ?></div>
contact.phpの105行目
<div class="vali"><?php echo $errors['email']; ?></div>
##試したこと
Notice: Undefined indexなので、バリデーションする前にif(isset($_POST['tel']))をつけたが解決できない。
お願いいたします。
追記:
問題のcontact.phpに以下を追記しましたが、バリデーションのメッセージが表示されない。
<?php if(isset($_POST['tel'])): ?> <div class="vali"><?php echo $errors['tel']; ?></div> <?php endif; ?>
さらに追記:
・バリデーションエラーのメッセージは出るが、画面上部にエラーが出力されてしまう
<?php if(isset($errors)): ?> <div class="mb-3"> <label>氏名</label><label class="kome">*</label><br> <div class="vali"><?php echo $errors['name']; ?></div> <input type="text" id="f-name" name="name" value="" placeholder="山田太郎"> </div> <div class="mb-3"> <label>フリガナ</label><label class="kome">*</label><br> <div class="vali"><?php echo $errors['kana']; ?></div> <input type="text" id="f-kana" name="kana" value="" placeholder="ヤマダタロウ"> </div> <div class="mb-3"> <label>電話番号</label><label class="kome">*</label><br> <div class="vali"><?php echo $errors['tel']; ?></div> <input type="text" id="f-tel" name="tel" value="" placeholder="09012345678"> </div> <div class="mb-3"> <label>メールアドレス</label><label class="kome">*</label><br> <div class="vali"><?php echo $errors['email']; ?></div> <input type="text" id="f-email" name="email" value="" placeholder="test@test.co.jp"> </div> <div class="f-title f-bottom"> <h3>お問い合わせ内容をご記入ください<label class="kome">*</label></h3> </div> <div class="vali"><?php echo $errors['contact']; ?></div> <div class="mb-3"> <textarea id="contact" name="contact" rows="7"></textarea> </div> <input type="hidden" name="csrf_token" value="<?php echo setToken(); ?>"> <button type="submit" class="btn" name="btn_confirm">送信</button> <?php endif; ?>
<?php $errors = []; // 名前の空欄チェック if(empty($_POST['name']) || mb_strlen($_POST['name']) > 10) { $errors['name'] = "名前は必須です。10文字以内で入力してください。"; } // $_SESSION['name'] = htmlspecialchars($_POST['name'], ENT_QUOTES, "UTF-8"); // フリガナの空欄チェック if(empty($_POST['kana']) || mb_strlen($_POST['kana']) > 10) { $errors['kana'] = "フリガナは必須です。フリガナは10文字以内で入力してください"; } // 電話番号のチェック // if(isset($_POST['email'])) { if(!preg_match("/^[0-9]+$/", $_POST['tel'])) { $errors['tel'] = "電話番号は0-9までの数字を入力してください"; } // } // 正しいEmailの形式化どうか // if(isset($_POST['email'])) { if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { $errors['email'] = "正しいメールアドレスを指定してください"; } // } // お問い合わせ内容の空欄チェック if(empty($_POST['contact'])) { $errors['contact'] = "お問い合わせ内容は必須です"; } ?>
ただ、 // if(isset($_POST['email'])) {のコメントアウトを外すと、画面上部にエラ〜メッセージは出力されないが、バリデーションメッセージが無効になってしまう。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/02/27 03:57
2021/02/27 03:59
退会済みユーザー
2021/02/27 06:26
2021/02/27 06:39
退会済みユーザー
2021/02/27 06:55