我有一个<select>
字段,我希望根据GET值选择适当的<option>
因此,我使用了一个三元语句来输出selected
属性,如:
<select name="data" id="data">
<option value="1" <?php echo $_GET['data'] == '1' ? 'selected' : '' ; ?>>One</option>
<option value="2" <?php echo $_GET['data'] == '2' ? 'selected' : '' ; ?>>Two</option>
<option value="3" <?php echo $_GET['data'] == '3' ? 'selected' : '' ; ?>>Three</option>
</select>
问题是,当页面第一次加载时,没有$_GET
数组,所以我在选择框中得到一个php错误:
注意:未定义的索引:中的数据
因此,我尝试使用isset
首先检查数组是否已设置,然后再检查值是否匹配:
<option value="1" <?php echo isset($_GET) && $_GET['data'] == '1' ? 'selected' : '' ; ?>>One</option>
这将返回相同的错误。
简洁地处理这个错误并实现我所追求的目标的最佳方法是什么?
试试这个,
<option value="1" <?php echo isset($_GET['data']) ? ($_GET['data'] == '1' ? 'selected' : '') : ''; ?>>One</option>
您可以使用for
循环,并且只有当您的需求为真时才打印出$selected
变量。这将避免你重复自己。
<select name="data" id="data">
<?php for ($i = 1; $i <= 3; $i++) { ?>
<?php $selected = (isset($_GET['data']) && $_GET['data'] === $i) ? 'selected' : ''; ?>
<option value="<?=$i?>" <?=$selected?>><?=$i?></option>
<?php } ?>
</select>
注意:我使用的是PHP 5.4,所以可以合法地使用PHP short echo,在我看来,它在视图/模板中要好得多
如果你想显示数字的文本,而不想手动使用数组,你可以查看Pear的numbers_Words包。
像一样尝试
<option value="1" <?php echo ( isset($_GET['data']) && $_GET['data'] == '1') ? 'selected' : '' ;?> >One</option>