道歉,如果过去曾问过类似的问题 - 我确实搜索了以前的问题,但没有找到我需要的答案。
我目前在我的网站上有一个帐户选项,其中包含我的设置'区域,允许用户更改其详细信息。他们可以改变的细节之一是他们的国家。我没有允许用户输入国家/地区(在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>
正如我的设置&#39;区域是注册用户,我显然有一个数据库表 - 让我们称之为用户&#39;我会使用它的简化版本,我有一个&#39;用户名&#39;专栏和国家&#39;柱。第一行数据(即第一个用户的详细信息)是&#39; user1&#39; (用户名)和&#39;英国&#39; (国家)。正如您所注意到的那样,&#39; user1&#39;住在英国&#39; - 此数据与下拉列表选项之一(即上面显示的<option value="UK">UK</option>
)相同。
点击“我的设置”时间&#39;页面,我选择了&#39; UK&#39;从下拉列表中,点击“保存”按钮。按钮(用于更新表中&#39; user1&#39;的数据) - 但是,在点击“保存”后显示页面。按钮,正如您在上面看到的,所选值是下拉列表中的第一个选项值(即<option value=""></option>
)。但问题是 - 表格中的数据是否成功更新 - 所以如果我选择“美国”这样的话。列表中的选项,它将成功更新“国家/地区”。 &#39; user1&#39;的数据到美国&#39;。
我想要的只是让用户在点击“保存”之前查看他们在列表中选择的国家/地区。按钮 - 在提交表单并重新加载和显示页面后,是否有显示下拉列表的第一个选项的原因?为什么会这样?不应该是“国家/地区”的表格数据。列显示(即&#39; UK&#39;选项,因为我在提交表单之前在下拉列表中选择了此选项)。然而,如果我使用html文本框作为表单的国家/地区部分,它只会显示“国家/地区”的表格数据。 &#39; user1&#39;的列行 - 即它会显示&#39; UK&#39;。
很抱歉,如果此问题的任何部分令人困惑或过度描述,非常感谢您的回复。 如果您需要,我将提供一个指向该页面的链接,其中包含临时登录详细信息,以便您可以看到我正在谈论的内容。
答案 0 :(得分: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>
答案 1 :(得分:0)
您需要将selected
标记添加到默认情况下要选择的国家/地区,而不是列表中的第一个。
<option value="UK" selected>UK</option>
因此,您需要在生成页面之前从数据库中读取此信息,以便正确设置下拉列表。
答案 2 :(得分:0)
这不符合你的想法:
value="<? echo $row_settings['country']; ?>"
您不想尝试在select
上设置“值”,而是要在相关的selected
元素上设置option
属性。例如,如果您在循环中创建它们,那么您的循环可能看起来像这样(伪代码):
for (each item)
selected = ''
if (item == user.country)
selected = 'selected'
echo '<option value="' . item . '" ' . selected . '>' . item . '</option'