首页 > 解决方案 > 验证错误后表单未显示选择下拉列表

问题描述

在我的表单中,我从 MySQL 数据表中生成选择选项。但是当我提交没有任何值的表单时,它会返回一个空白页面并且不显示任何验证错误。当我选择一个值并提交表单时,它会将值插入 MySQL 表。不会引发 MySQL 或 PHP 错误。我假设问题是选择选项的查询没有运行。但如果是问题所在,避免这个问题的良好做法应该是什么?我的表格是:

<?php
   require 'db.php';
   if ($_SERVER["REQUEST_METHOD"] == "POST") {
       $ad_di = "";
       $ad_di_err = "";
   
       if (empty(trim($_POST["ad_di"]))) {
           $ad_di_err = "District cannot be empty.";
       } else {
           $ad_di = trim($_POST["ad_di"]);
       }
   
       if (empty($ad_di_err)) {
           $sql = "INSERT INTO address (ad_di) VALUES (?)";
           if ($stmt = $mysqli->prepare($sql)) {
               $stmt->bind_param("i", $p_ad_di);
               $p_ad_di = $ad_di;
               if ($stmt->execute()) {
                   $id = $mysqli->insert_id;
                   header("location: add.php?id=$id&update=success");
               }
               $stmt->close();
           } 
       }
   }
   ?>
<form id="acEdit" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post" class="contact-form">
   <div class="row">
      <div class="col-3">
         <div class="form-group">
            <label>District</label>
            <select name='ad_di' id='ad_di' class='custom-select'>
               <option value=''>Select one ...</option>
               <?php
                  $qDistrict = "SELECT * FROM districts order by name ASC";
                  echo "<select name='ad_di' id='ad_di' class='custom-select'><option value=''>Select one ...</option>";
                  foreach ($mysqli->query($qDistrict) as $rowDistrict) {
                      echo "<option value={$rowDistrict['id']}>{$rowDistrict['name']}</option>";
                  }
                  echo "</select>";
                  ?>
            </select>
            <span class="invalid-feedback"><?php echo $ad_di_err; ?></span>
         </div>
      </div>
   </div>
</form>

第一次加载页面时,上面的选择选项查询返回如下,

<select name="ad_di" id="ad_di" class="custom-select">
   <option value="">Select one ...</option>
   <option value="28">Dist A</option>
   <option value="11">Dist B</option>
   <option value="35">Dist C</option>
   <option value="33">Dist D</option>
</select>

但是当验证错误发生时,返回页面没有任何选项,只是返回

<select name="ad_di" id="ad_di" class="custom-select">
   <option value="">Select one ...</option>
</select>

标签: phphtmlmysql

解决方案


推荐阅读