【问题标题】:Display database table value in HTML dropdown <select> list在 HTML 下拉列表 <select> 列表中显示数据库表值
【发布时间】:2014-09-21 20:00:55
【问题描述】:

如果过去有人问过类似的问题,我们深表歉意 - 我确实搜索了以前的问题,但没有找到我需要的答案。

我目前在我的网站上有一个带有“我的设置”区域的帐户选项,允许用户更改他们的详细信息。他们可以改变的细节之一是他们的国家。我没有让用户输入国家(在 html 文本框中),而是通过提供世界上大多数国家的下拉列表来限制事情。我在下面简要介绍了我的代码(因为我不想粘贴国家列表并浪费时间):

<select name="country" id="country" class="required" value="<? echo $row_settings['country']; ?>">
<option value=""></option>
<option value="Afghanistan">Afghanistan</option>
<option value="Albania">Albania</option>
...
<option value="UK">UK</option>
<option value="USA">USA</option>
...
</select>

由于这个“我的设置”区域是为注册用户准备的,我显然有一个数据库表 - 我们称之为“用户”,我将使用它的简化版本,其中有一个“用户名”列和一个“国家”栏目。第一行数据(即第一个用户的详细信息)是“user1”(用户名)和“UK”(国家)。您会注意到,“user1”位于“UK”中 - 该数据与下拉列表选项之一相同(即上面显示的 &lt;option value="UK"&gt;UK&lt;/option&gt;)。

在“我的设置”页面上,我从下拉列表中选择了“英国”选项,然后单击“保存”按钮(以更新表格中“用户 1”的数据) - 但是,一旦单击“保存”按钮后会显示页面,如上所示,所选值是下拉列表中的第一个选项值(即&lt;option value=""&gt;&lt;/option&gt;)。但问题是 - 表中的数据已成功更新 - 因此,如果我在列表中选择“美国”选项,它将成功地将“用户 1”的“国家”数据更新为“美国”。

我想要的是,只是让用户在单击“保存”按钮之前查看他们在列表中选择的国家 - 提交表单后显示下拉列表的第一个选项是否有原因页面重新加载并显示?为什么会这样?不应该显示“国家”列的表格数据(即“英国”选项,因为我在提交表单之前在下拉列表中选择了这个)。然而,如果我对表单的国家/地区部分使用 html 文本框,它只会显示“user1”行的“国家”列的表格数据 - 即它将显示“英国”。

抱歉,如果此问题的任何部分令人困惑或过度描述,非常感谢您的任何回复。 如果您需要,我将提供包含临时登录详细信息的页面链接,以便您了解我在说什么。

【问题讨论】:

  • 看的太多了,能不能简单介绍一下!
  • &lt;select&gt; 不是type="text" 没有value= -> &lt;select name="country" type="text" ... value="&lt;? echo $row_settings['country']; ?&gt;"&gt;。您需要将selected 添加到所选选项-> &lt;select name="country" id="country" class="required"&gt;...&lt;option value="UK" selected&gt;UK&lt;/option&gt;...&lt;/select&gt;。根据您创建选项的方式,您可以动态执行 -> if($row_settings['country'] == 'UK') echo "selected";
  • 致 FREAKENGINEER:基本上我有一个“我的设置”页面供我网站的帐户持有人使用 - 他们可以通过从选项下拉列表中选择来更改他们居住的国家 - 他们选择更新的国家他们在“用户”数据库中的用户数据。但是,一旦用户单击“保存”按钮并在提交表单后显示页面,下拉列表将显示第一个可用的选项值,而不是用户在提交表单之前选择的国家/地区(通过“保存”按钮)。

标签: php html mysql database


【解决方案1】:

这里有一个快速的 POC:

<?php
$countries = ['Afghanistan', 'Albania', 'UK', 'USA'];
$row_settings = [
  'username' => 'Joe',
  'country' => 'UK'
]
?>
<select name="country" type="text" id="country" class="required">
<?php foreach($countries as $country): ?>
  <option <?php echo ($row_settings['country'] == $country) ? 'selected' : ''; ?>><?php echo $country; ?></option>
<?php endforeach; ?>
</select>

【讨论】:

    【解决方案2】:

    您需要将selected标签添加到您要默认选择的国家/地区,而不是列表中的第一个。

    <option value="UK" selected>UK</option>
    

    因此,您需要在生成页面之前从数据库中读取此信息,以便正确设置下拉菜单。

    【讨论】:

      【解决方案3】:

      这并不像你认为的那样:

      value="<? echo $row_settings['country']; ?>"
      

      您不想尝试在select 上设置“值”,而是想在相关option 元素上设置selected 属性。例如,如果您在循环中创建它们,那么您的循环可能看起来像这样(伪代码):

      for (each item)
          selected = ''
          if (item == user.country)
              selected = 'selected'
          echo '<option value="' . item . '" ' . selected . '>' . item . '</option'
      

      【讨论】:

        猜你喜欢
        • 2012-05-21
        • 1970-01-01
        • 1970-01-01
        • 2013-09-10
        • 1970-01-01
        • 2021-08-17
        • 2016-02-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多