php - 验证错误后表单未显示选择下拉列表
问题描述
在我的表单中,我从 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>
解决方案
推荐阅读
- c++ - SIMD 值的健全哈希?
- typescript - 带有标头的 HttpClientModule http 帖子不起作用
- spring - 在 Spring Boot 中设计可定制的 ERP
- node.js - 尝试发送 formData 时出现“MulterError:意外字段”
- gcc - Xlc '-qnotwolinkis' 编译器选项的 gcc 等效项是什么?
- spring-boot - 无法销毁类型为 [org.camunda.bpm.spring.boot.starter.webapp.filter.LazyProcessEnginesFilter] 的名为 [Engines Filter] 的过滤器
- r - 如何在 wordcloud2 输出中插入水印
- linux - 一个普通的 Linux 发行版中有多少个文件?
- angular - 有没有办法改变我的网络图中节点的形状?
- php - PHP用empty()或truthy检查变量