実現したいこと
htmlとphpで、入力項目が未入力だった場合、それぞれのテキストボックスの下にエラーを表示させたい
発生している問題・分からないこと
入力項目が複数ある中、1つしかうまくエラーが表示されません。
以下の通りになりました。
<結果>
・「日付」だけが未入力の場合、エラーは表示されない、ページは遷移しない。
・「種別」、「タイトル」だけが未入力の場合、エラーは表示されない、ページは遷移する。
・「内容」だけが未入力の場合、エラー表示される。ページは遷移しない。
・「内容」と他の項目が未入力だと、内容も他の項目もエラー表示されます。
該当のソースコード
index.php
1if (isset($_POST['edit'])) { 2 $regist_date = $_POST['regist_date']; //日付 3 $category = $_POST['category']; //種別 4 $title = htmlspecialchars($_POST['title'], ENT_QUOTES, "UTF-8"); //タイトル 5 $content = htmlspecialchars(nl2br($_POST['content']), ENT_QUOTES, "UTF-8"); //内容 6 7 $errors = array(); 8 if (empty($regist_date)) { 9 $errors['regits_date'] = "日付が選択されていません"; 10 } 11 if (empty($category)) { 12 $errors['category'] = "種別が選択されていません"; 13 14 } 15 if (empty($title)) { 16 $errors['title'] = "タイトルが入力されていません"; 17 } 18 if (empty($content)) { 19 $errors['content'] = "内容が入力されていません"; 20 }
index.html
1 <form action="" method="post" enctype="multipart/form-data"> 2 <table class="form-table registration_table"> 3 <tbody> 4 <?php if (isset($result)) { while ($row = mysqli_fetch_assoc($result)) {?> 5 <tr> 6 <th>投稿日</th> 7 <td> 8 <input type="date" name="regist_date" value="<?=$row['regist_date']?>"/> 9 <?php if(isset($errors['regist_date'])) { ?> 10 <?="<span class='error'>".$errors['regist_date'] ."</span>"?> 11 <?php } ?> 12 </td> 13 </tr> 14 <tr> 15 <th>種別</th> 16 <td> 17 <select name="category" value ="<?=$row['category']?>"> 18 <option value="">選択してください</option> 19 <?php foreach($array_category as $key =>$value){ ?> 20 <option value="<?=$value?>" <?php if ($row['category'] == $value) { echo 'selected'; }?>><?=$value?></option> 21 <?php }?> 22 </select> 23 <?php if(isset($errors['category'])) { ?> 24 <?="<span class='error'>".$errors['category']."</span>"?> 25 <?php } ?> 26 </td> 27 </tr> 28 <tr> 29 <th>タイトル</th> 30 <td> 31 <input type="text" name="title" value="<?=$row['title']?>"/> 32 <?php if(isset($errors['title'])) { ?> 33 <?="<span class='error'>".$errors['title']."</span>"?> 34 <?php } ?> 35 </td> 36 </tr> 37 <tr> 38 <th>内容</th> 39 <td> 40 <textarea name="content" cols="20" rows="2"><?=$row['content']?></textarea> 41 <?php if(isset($errors['content'])) { ?> 42 <?="<span class='error'>".$errors['content']."</span>"?> 43 <?php } ?> 44 </td> 45 </tr>
試したこと・調べたこと
上記の詳細・結果
<結果>
・「日付」だけが未入力の場合、エラーは表示されない、ページは遷移しない。
・「種別」、「タイトル」だけが未入力の場合、エラーは表示されない、ページは遷移する。
・「内容」だけが未入力の場合、エラー表示される。ページは遷移しない。
・「内容」と他の項目が未入力だと、内容も他の項目もエラー表示されます。
補足
特になし
0 コメント