【群聊问题】如何让下拉框保留选择的内容
首先,我们先来看一个最简单的下拉框的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>
效果如上图。
但是每次提交后,上面依然是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>
示例代码参见附件:
test.php.zip没有找到相关结果
已邀请:
1 个回复
韩林涛 - 《译者编程入门指南》作者
赞同来自: Bruce
好的,我觉得有三个比较容易引起理解错误的点是:
一、HTML的下拉框是如何通过PHP实现的:
通过上面的代码可知,HTML是通过<select>元素来实现下拉框的,所有要显示的元素都在<option>里面。
如果想用PHP来实现,那么就需要让PHP来echo出每一个option来,而那么多的option,PHP怎么显示出来呢?
答案是通过数组(Array),把要显示的内容放到数组里面,然后用循环把数组里的元素取出来,放到option里面就可以了。
二、如何将用户的选项单独提取出来
单靠上面的select元素是不行的,而是要放到一个form表单中,这样当用户选择了选项后,点击提交,用户的选项才能提取出来。
但是在表单提交的时候,我们获得并不是选项的内容,而是选项对应的value值:
如果我们把这个value看作是数字的话,那么数字就可以成为数组的索引(Index),那么就可以通过这个索引来从数组中取值。
比如我的数组是:$languages = array("English","Chinese")
而下拉框是:
当我通过下拉框选择了Chinese,那么表单获取到的值就是1,那么我们就可以通过数组:$languages[1]来获取到Chinese这个元素。
三、下拉框的默认元素
当没有任何一个option有selected属性时,下拉框默认显示第一个option的内容,所以我们一般不这样来写下拉框:
而是这样写:
当有一个option有selected属性时,下拉框就会显示这个选项:
以上三个错误的点理解清楚了,再加上对if判断语句熟悉,那么我刚刚链接里的写法应该就能懂了。