【群聊问题】如何让下拉框保留选择的内容

首先,我们先来看一个最简单的下拉框的HTML的代码:

<select>  
  <option value ="volvo">Volvo</option>
  <option value ="saab">Saab</option>
  <option value="opel">Opel</option>
  <option value="audi">Audi</option>
</select>


下面是PHP的写法:

<!DOCTYPE html>
<html>
<body>

<?php

$languages = array("English","Chinese","Japanese","Korean");

?>

<select>
<?php
foreach($languages as $language)
{
echo "<option>".$language."</option>";
}

?>
</select>
</body>
</html>

接下来我们把下拉框放到一个表单中,并在提交后获取你的选项:

<!DOCTYPE html>
<html>
<body>

<?php

$languages = array("Please Select Langauge","English","Chinese","Japanese","Korean");

?>

<form action="" method="post">
<select name="language">
<?php
foreach($languages as $id => $language)
{
echo "<option value ='$id'>".$language."</option>";
}

?>
</select>
<input type="submit" value="Confirm">
</form>

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
$language = $_POST['language'];
echo "You have selected: ". $languages[$language];
}
?>
</body>
</html>


/coding/uploads/files_user1/question/5f37f044c3332540560.png


效果如上图。

但是每次提交后,上面依然是Please Select Language,而没有修改成你选择的语言。

实现代码如下:

<!DOCTYPE html>
<html>
<body>

<?php

$languages = array("Please Select Langauge","English","Chinese","Japanese","Korean");

?>

<form action="" method="post">
<select name="language">
<?php
foreach($languages as $id => $language)
{
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$language_id = $_POST['language'];

if($id == $language_id)
{
echo "<option selected='selected' value ='$id'>".$language."</option>";
}
else
{
echo "<option value ='$id'>".$language."</option>";
}
}
else
{
echo "<option value ='$id'>".$language."</option>";
}
}

?>
</select>
<input type="submit" value="Confirm">
</form>

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
$language = $_POST['language'];
echo "You have selected: ". $languages[$language];
}
?>
</body>
</html>


示例代码参见附件:

http://translation.education/coding/plugins/wc_editor/static/ueditor/dialogs/attachment/fileTypeImages/icon_rar.gif
test.php.zip


已邀请:

韩林涛 - 《译者编程入门指南》作者

赞同来自: Bruce

好的,我觉得有三个比较容易引起理解错误的点是:


一、HTML的下拉框是如何通过PHP实现的:

<!DOCTYPE html>
<html>
<body>

<select>
  <option>Volvo</option>
  <option>Saab</option>
  <option>Mercedes</option>
  <option>Audi</option>
</select>
 
</body>
</html>


通过上面的代码可知,HTML是通过<select>元素来实现下拉框的,所有要显示的元素都在<option>里面。


如果想用PHP来实现,那么就需要让PHP来echo出每一个option来,而那么多的option,PHP怎么显示出来呢?


答案是通过数组(Array),把要显示的内容放到数组里面,然后用循环把数组里的元素取出来,放到option里面就可以了。


二、如何将用户的选项单独提取出来


单靠上面的select元素是不行的,而是要放到一个form表单中,这样当用户选择了选项后,点击提交,用户的选项才能提取出来。


但是在表单提交的时候,我们获得并不是选项的内容,而是选项对应的value值:

<select>
  <option value="volvo">Volvo XC90</option>
  <option value="saab">Saab 95</option>
  <option value="mercedes">Mercedes SLK</option>
  <option value="audi">Audi TT</option>
</select>


如果我们把这个value看作是数字的话,那么数字就可以成为数组的索引(Index),那么就可以通过这个索引来从数组中取值。


比如我的数组是:$languages = array("English","Chinese")


而下拉框是:

<select>
  <option value="0">English</option>
  <option value="1">Chinese</option>
</select>


当我通过下拉框选择了Chinese,那么表单获取到的值就是1,那么我们就可以通过数组:$languages[1]来获取到Chinese这个元素。


三、下拉框的默认元素


当没有任何一个option有selected属性时,下拉框默认显示第一个option的内容,所以我们一般不这样来写下拉框:

<select>
  <option value="0">English</option>
  <option value="1">Chinese</option>
</select>


而是这样写:

<select>
  <option value="0">请选择语言</option>
  <option value="1">English</option>
  <option value="2">Chinese</option>
</select>


当有一个option有selected属性时,下拉框就会显示这个选项:

<select>
  <option value="0">请选择语言</option>
  <option value="1">English</option>
  <option value="2" selected = "selected">Chinese</option>
</select>


以上三个错误的点理解清楚了,再加上对if判断语句熟悉,那么我刚刚链接里的写法应该就能懂了。


要回复问题请先登录注册