【问题标题】:Determining if other <option> was selected, or if default "Select one..." with blank value was submitted确定是否选择了其他 <option>,或者是否提交了具有空白值的默认“选择一个...”
【发布时间】:2011-08-04 21:24:10
【问题描述】:

我正在向我的搜索页面添加一个排序选项。我正在使用两种选择表单输入类型,一种用于排序字段,另一种用于 ASC/DESC。我的第一个选项是 value="" 和文本“Select one...”。

<label for="sort[order_by_field]">Field</label><select name="sort[order_by_field]" id="combobox">
    <option value="">Select one...</option>
    <optgroup label="---">
        <option value="finding_incident_number"<?php echo ($field == 'finding_incident_number' ? ' selected="selected"': false); ?>>Incident #</option>
        <option value="finding_violation_type"<?php echo ($field == 'finding_violation_type' ? ' selected="selected"': false); ?>>Finding</option>

<label for="sort[order_by_direction]">Direction</label>
    <select name="sort[order_by_direction]">
    <option>Select one...</option>
    <option value="ASC"<?php echo ($dir == 'ASC' ? ' selected="selected"': false); ?>>Ascending</option>
    <option value="DESC"<?php echo ($dir == 'DESC' ? ' selected="selected"': false); ?>>Descending</option>
    </select>

提交表单后,我检查 isset($_POST['sort']).它已设置。我还检查了!empty。它总是 !empty。我想知道用户是否真的做出了选择。有没有办法设置它,这样我就不必检查单个数组值,即 isset($_POST['sort']['order_by_field'])?我希望将来有一个动态数量的可添加/可删除的按字段排序。

我想我可以使用 optiongrp 标签,但那不会是语义标记吧?不过我想它会起作用的。

从更广泛的角度来看,将“选择一个...”放在表单下拉列表中是一种好习惯吗?

【问题讨论】:

  • 如果您 p​​rint_r 您的数据,$_POST['sort'] 将始终被设置。只有当所有字段都设置为Select one 时,它才会为空。您可以通过循环检查sort

标签: php forms option isset


【解决方案1】:

选择字段总是设置在$_POST

你应该检查

if ($_POST['sort_by']['field_name'] !='')

或

if ($_POST['sort_by']['field_name'] != null)

在使用变量之前检查变量总是一个好习惯。

输入“选择一个...”是一种很好的做法,这没什么不好。

【讨论】:

  • 怎么样:if ( !empty($_POST['sort']['field']) ) 这两个都涵盖了吧?
猜你喜欢
  • 2015-01-30
  • 2010-09-14
  • 2017-04-12
  • 1970-01-01
  • 2011-11-17
  • 2021-12-24
  • 1970-01-01
  • 2016-09-12
  • 1970-01-01
相关资源
最近更新 更多