Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 最佳实践使用数据库中的值填充引导HTML表单选择下拉列表_Php_Mysql_Twitter Bootstrap - Fatal编程技术网

Php 最佳实践使用数据库中的值填充引导HTML表单选择下拉列表

Php 最佳实践使用数据库中的值填充引导HTML表单选择下拉列表,php,mysql,twitter-bootstrap,Php,Mysql,Twitter Bootstrap,更新: 我做了一些更改并更新了代码 它现在工作得更好了,当加载表单时,来自数据库的值会自动显示在表单字段中,这是通过向选项标记添加“selected”来完成的 但是,我仍然有一个bug: 选择新值时,它将正确存储在DB中,并在提交表单时显示在字段中,但前提是我在下拉列表中选择了低于上一个值的值。如果选择了高于上一个值的值,则新值存储在DB中,但旧值仍显示在表单字段中 调试HTML输出时,我可以看到由于某种原因,旧值和新值都列为“selected”选项。我使用“if…elseif…else”语句,

更新:

我做了一些更改并更新了代码

它现在工作得更好了,当加载表单时,来自数据库的值会自动显示在表单字段中,这是通过向选项标记添加“selected”来完成的

但是,我仍然有一个bug:

选择新值时,它将正确存储在DB中,并在提交表单时显示在字段中,但前提是我在下拉列表中选择了低于上一个值的值。如果选择了高于上一个值的值,则新值存储在DB中,但旧值仍显示在表单字段中

调试HTML输出时,我可以看到由于某种原因,旧值和新值都列为“selected”选项。我使用“if…elseif…else”语句,并相信这是正确的,但我不明白为什么在提交后我会选择两个选项。我是否理解IF语句的用法是错误的

HTML输出的一部分:

<option value="MDV">Maldives</option>
<option value="MLI" selected>Mali</option>
<option value="MLT" selected>Malta</option>
<option value="MHL">Marshall Islands</option>
HTML代码:

<div class="form-group">
 <label class="control-label col-sm-2" for="country">Country</label>
 <div class="col-sm-10">
  <select class="form-control" name="country" id="country">
  <?php 
  foreach ($CountryList as $row) {
      if ($row['iso3'] == $_POST['country']) {
        echo "<option value={$row['iso3']} selected>";
        } elseif ($row['iso3'] == $country) {
            echo "<option value={$row['iso3']} selected>";
            } else {
            echo "<option value={$row['iso3']}>";
            }
        echo $row['short_name'];
        echo '</option>';
        }
  ?>
  </select>
 </div> 
</div>

国家

我认为您结束foreach循环可能太早了,您还需要为您的选项指定一个值,如下所示:

 <div class="form-group">
 <label class="control-label col-sm-2" for="country">Country</label>
  <div class="col-sm-10">
  <select class="form-control" name="country" id="country">
   <?php foreach ($CountryList as $row): ?>
   <option value="<?=$row["short_name"]?>">
    <?=$row["short_name"]?>
   </option>
    <?php endforeach ?>
  </select>
 </div> 
</div>

国家

只需检查$row['short_name']是否等于post var,然后在选项标记中添加一个“selected”属性。我尝试过这样做,但仍有错误,请查看更新的问题和新代码,如果您有更多建议,请告诉我。谢谢您的时间。我更改了代码并修改了您的建议,但是在选择新值时出现了错误。请查看带有新代码的更新问题,如果您有更多建议,请告诉我。谢谢你抽出时间。
 <div class="form-group">
 <label class="control-label col-sm-2" for="country">Country</label>
  <div class="col-sm-10">
  <select class="form-control" name="country" id="country">
   <?php foreach ($CountryList as $row): ?>
   <option value="<?=$row["short_name"]?>">
    <?=$row["short_name"]?>
   </option>
    <?php endforeach ?>
  </select>
 </div> 
</div>