我有一个选项下拉列表,如果值等于搜索变量,我需要回显selected
。
现在我正在使用PHP if语句来决定这一点,但我希望通过使用一种在我的代码中不占用这么多行的方法来清理它。
这是我的php if语句的一个例子:
<option value="antiques" <?php if($_POST['category'] == 'antiques'){echo 'selected';}?>>Antiques</option>
虽然这有效,但它在我的代码中占用了相当多的空间,因为我有近100个这样的选择选项。
有没有更好的方法来检查post变量是否等于此选项的值,然后回显selected
?
答案 0 :(得分:3)
一个简单的方法是使用PHP三元运算符(更多信息可在此处获取:http://php.net/manual/en/language.operators.comparison.php [向下滚动关于浮点数的大警告])
<option value="antiques"<?php echo ($_POST['category'] == 'antiques')?' selected':'';}?>>Antiques</option>
在这个例子中它没有节省太多空间,但在我看来,这是一种更简洁的方式将其与HTML内联。
使用@crazymoin
中的代码进行编辑将其转换为函数的想法很容易让它变得容易。
我会像这样修改函数:
function abc($post,$value,$label){
echo '<option value="'.$value.'"'.($_POST[$post] == $value)?' selected':''.'>'.$label.'</option>';
}
然后你可以用它来调用它:
<?php abc('category','antiques','Antiques'); ?>
请注意,如果由于某种原因,$ _POST数组中的指定索引不存在,PHP将抛出一些有关未定义索引的警告。您可能希望扩展该函数以使用isset()等进行一些检查。
答案 1 :(得分:1)
创建一个函数并多次使用它:
function abc($postData, $thisData) { if($postData == $thisData) { echo ' selected';} }
现在这样做:
<option value="antiques" <?php abc($_POST['category'], 'antiques'); ?> >Antiques</option>
希望它有所帮助!
使用Justin Turner回复更改:
功能是:
function abc($postData, $thisData) {
echo '<option value="'.$thisData.'">'.($_POST['category'] == 'antiques')?' selected':''.$thisData.'</option>';
}
现在只需要多次使用该功能:
<?php abc($_POST['category'], 'antiques'); ?>
答案 2 :(得分:1)
我喜欢在代码的一个区域中进行所有逻辑处理。
一种干净的方法是创建一个包含所有类别的数组。然后填写与所选类别匹配的那个。在每个菜单选项中,打印出与选项名称匹配的数组键的内容。
<?php
$selected=array(
'antiques'=>'',
'horses'=>'',
'umbrellas'=>''
);
$selected[$_POST['category']]='selected';
?>
<option value="antiques" <?php echo $selected['antiques'];?>>Antiques</option>