実現したい事
お問合せフォームで、各項目を入力して『内容確認』ボタンを押した際に入力ミスの項目があった場合に、他の項目で入力された値がそのまま保持されるようにしたいです。
たにぐち まことさんのYouTube動画(URL:https://youtu.be/tHLnMiRXzNw)を見ながら作成しましたが、なぜか以下のようなエラーが表示されてしまいます。
この原因は何なのでしょうか?
ちなみに、項目に入力した後には、入力された値が保持されるようにはなっています。
なので、実装したい機能は実現できているのですが、画面にアクセス時にエラーが表示されているのを解消したいです。
表示されるエラー
以下の内容が、フォーム入力画面にアクセス時に、Inputの中にすでに入力されている状態になってしまっています。
<br /><b>Notice</b>: Undefined index: email in <b>C:\xampp\htdocs\contactform2\index.php</b> on line <b>51</b><br />
コード
PHP
1<?php 2$error = ['name'=> '', 'email'=> '', 'comments'=> '']; 3 4if ($_SERVER['REQUEST_METHOD'] === 'POST') { 5 $post = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING); 6 7 // フォームの送信時にエラーをチェックする 8 if ($post['name'] === '') { 9 $error['name'] = 'blank'; 10 } 11 if ($post['email'] === '') { 12 $error['email'] = 'blank'; 13 } 14 if ($post['comments'] === '') { 15 $error['comments'] = 'blank'; 16 } 17} 18?> 19 20<!doctype html> 21<html lang="ja"> 22 <head> 23 <!-- Required meta tags --> 24 <meta charset="utf-8"> 25 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 26 27 <!-- Bootstrap CSS --> 28 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous"> 29 30 <link rel="stylesheet" href="style.css"> 31 32 <title>お問合せフォーム</title> 33 </head> 34 <body class="bg-light"> 35 <div class="container"> 36 <div class="row"> 37 <div class="card my-5 col-md-6 offset-3"> 38 <h2 class="mx-auto mt-3">お問合せフォーム</h2> 39 <form action="" method="POST" novalidate> 40 <div class="formfroup mt-3"> 41 <label for="name"><span class="hissu">必須</span>名前</label> 42 <input type="text" name="name" class="form-control" required autofocus> 43 <?php if (isset($_POST['name'])) { 44 if ($error['name'] === 'blank'){ 45 echo "<p class='error-msg'>※お名前をご記入ください。</p>"; 46 }; } 47 ?> 48 </div> 49 <div class="formfroup mt-3"> 50 <label for="email"><span class="hissu">必須</span>メールアドレス</label> 51 <input name="email" type="text" class="email form-control" id="email" value="<?php echo htmlspecialchars($_POST['email']); ?>" required> 52 <?php if (isset($_POST['email'])) { 53 if ($error['email'] === 'blank'){ 54 echo "<p class='error-msg'>※メールアドレスをご記入ください。</p>"; 55 }; } ?> 56 </div> 57 <div class="formfroup mt-3"> 58 <label for="age"><span class="hissu">必須</span>年齢</label> 59 <select name="age" name="age" class="form-control" id="age" value="<?php echo htmlspecialchars($post['age']); ?>" required> 60 <option>年齢を選んでください</option> 61 <?php 62 for ($i = 18; $i <=60; $i++){ 63 echo "<option value=".$i.">".$i."</option>"; 64 } 65 ?> 66 </select> 67 </div> 68 <div class="formfroup mt-3"> 69 <label for="comments"><span class="hissu">必須</span>コメント</label> 70 <textarea name="comments" class="form-control" name="comments" id="comments" cols="40" rows="7" value="<?php echo htmlspecialchars($post['comments']); ?>" required></textarea> 71 <?php if (isset($_POST['comments'])) { 72 if ($error['comments'] === 'blank'){ 73 echo "<p class='error-msg'>※コメントをご記入ください。</p>"; 74 }; } ?> 75 </div> 76 <div class="formfroup mt-3"> 77 <input type="submit" class="submit_button my-3" value="内容確認へ"> 78 </div> 79 </form> 80 </div> 81 </div> 82 </div> 83 84 85 86 <!-- Optional JavaScript --> 87 <!-- jQuery first, then Popper.js, then Bootstrap JS --> 88 <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script> 89 <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script> 90 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script> 91 </body> 92</html>
###エラーの対象コード
Line51は以下のコードです。
value="<?php echo htmlspecialchars($_POST['email']); ?>"
試したこと
現在、$_POSTとなっている箇所はもともと$postとしていてエラーに「Unidentified index: post」となっていたので$_POSTに変更しましたが、上記のエラーが表示されるようになりました。
利用環境
XAMPPのMySQLを利用しています。
まだPHPの勉強を始めて数日でわからないことが多いですが、このエラーを解消するための方法をご教授いただけると幸いです。
よろしくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/07/17 01:06
2020/07/17 01:08
退会済みユーザー
2020/07/17 01:13