[英]PHP Display Multi-Select From Array Values with Pre-Selected Options User Previously Saved
我一直在尝试让 PHP 使用基于用户先前保存的预选值填充 HTML 多选表单。 我在这里和其他地方找到了有用的示例,这些示例有助于从概念上理解需要做什么,但我无法让语法正常工作。
这是相关的代码片段
<?php
// This array will hold all options to be displayed in multi-select form
$allservices = array('amazon','facebook','twitter','reddit');
// $blockedservices is variable comes as a string from database like amazon,facebook.
// Initially the value of the array is NULL for new users or user that never submitted.
// I am exploding here as array to make it easier to work with like ['amazon','facebook']
$selectedservices = explode(",", $blockedservices);
?><select name="services[]" multiple="multiple"><?
//looping through all options
foreach($allservices as $option){
//trying to see if option was preselected
if($selectedservices == $option) {
?><option selected="selected" value="<?php echo $option;?>"><?php echo $option;?></option><?
}
else {
?><option value="<?php echo $option;?>"><?php echo $option;?></option><?
}
}
?></select>
目前,这会导致Undefined variable: option in...
更新
根据反馈,使用<?php
而不是<?
解决了未定义的错误问题。 但是,未显示预先选择的选项。 相反,即使存在预选,也会显示所有选项而没有预选。
我还尝试了in_array
,结果与未识别预选选项的结果相同。
这是in_array
的另一个片段:
<?php
$allservices = array('amazon','facebook','twitter','reddit');
$selectedservices = explode(",", $blockedservices);
?><select name="services[]" multiple="multiple"><?php
foreach($allservices as $option){
if(!empty($selectedservices)){
if(in_array($option,$selectedservices)){
?><option selected="selected" value="<?php echo $option;?>"><?php echo $option;?></option><?php
}
else {
?><option value="<?php echo $option;?>"><?php echo $option;?></option><?php
}
}else{
?><option value="<?php echo $option;?>"><?php echo $option;?></option><?php
}
}
?></select>
更新 2
我在下面发布了一个答案,解决了所有代码和语法问题。 发布的答案在所有浏览器中都按预期工作。 希望它可以帮助将来需要完成同样事情的人。 感谢大家在此过程中提供帮助的评论。
只需替换<? 到<?php并且此错误将消失,因为您在 php.ini 文件中禁用了短标签选项更新
<?php
$allservices = array('amazon','facebook','twitter','reddit');
$blockedservices ="amazon,facebook";
$selectedservices = explode(",", $blockedservices);
?><select name="services[]" multiple="multiple"><?php
//looping through all options
foreach($allservices as $option){
//trying to see if option was preselected
if(in_array($option, $selectedservices)) {
?><option selected="selected" value="<?php echo $option;?>"><?php echo $option;?></option><?php
}
else {
?><option value="<?php echo $option;?>"><?php echo $option;?></option><?php
}
}
?></select>
还有另一种解决方案 go 到 C/php/php.ini 文件并搜索short_open_tag
默认情况下它将是Off将其更改为short_open_tag=On
感谢大家为此提供的所有帮助。 根据所有评论和回复,原始代码存在三个问题:
<?php
而不是<?
in_array
<option>
标记中selected
值的 HTML 语法不合适此更新的代码完全解决了所有问题并按预期工作:
<?php
$allservices = array('amazon','facebook','twitter','reddit');
$selectedservices = explode(",", $blockedservices);
?><select name="services[]" multiple="multiple"><?php
foreach($allservices as $option){
if(!empty($selectedservices)){
if(in_array($option,$selectedservices)){
?><option value="<?php echo $option;?>" selected><?php echo $option;?></option><?php
}
else {
?><option value="<?php echo $option;?>"><?php echo $option;?></option><?php
}
}else{
?><option value="<?php echo $option;?>"><?php echo $option;?></option><?php
}
}
?></select>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.