我希望在表单提交后保留选定的值,如@ ignacio-vazquez-abrams所建议的here。我试过这个:
<form action="" method="get">
...
foreach ($file_array as $location)
$options .= '<option name="' . $location . (($_GET['name'] == $location) ? 'selected="true"' : '') . '" value="' . $location . '">' . $location .'</option>';
$select = '<select id="location" name="location">' . $options . '</select>';
echo $select;
...
</form>
但我收到了通知:
注意:未定义的索引:名称在...
更新
我试过这个(正如评论中建议的那样,我建议如何here):
$options .= '<option name="' . $location . (!isset($_GET['selected']) ? 'selected="selected"' : '') . '" value="' . $location . '">' . $location .'</option>';
没有错误,但仍未生成预期结果 - 表单提交后的选定值未保留。
如何实现这一目标?
答案 0 :(得分:1)
您使用的是严格的PHP模式,因此在将其值与某些内容进行比较之前,您需要检查GET参数是否已通过(使用isset()
)。
<form action="" method="get">
<select id="location" name="location">
<?php foreach($file_locations as $location): ?>
<option <?php echo ((isset($_GET['location']) && $_GET['location'] == $location) ? 'selected="selected"' : '') ?> value="<?php echo $location ?>"><?php echo $location ?></option>
<?php endforeach; ?>
</select>
</form>
此外,您需要撰写selected="selected"
或selected
代替selected="true"
。
答案 1 :(得分:1)
实际上为此添加正确的答案有很多遗漏,但无论如何我都会尝试。
PHP位置数组:
$locations = array( 'Loc1', 'Loc2', 'Loc3' );
在表格上:
<form action="" method="get">
<select name="location">
<?php
foreach ( $locations as $location ) {
echo '<option value="' . $location . '" ' . ( isset( $_GET['location'] ) && $_GET['location'] == $location ? 'selected="selected"' : '' ) . '>' . $location . '</option>';
}
?>
</select>
</form>
首先,无法告知您的发布值是值name
。我记得没有选项的名称属性,它必须是一个包含它的选项,它包含属性名称,并且你将selected="true"
放在name属性中,而你首先没有正确关闭它(和这是不存在的。)