在验证表单期间设置select元素值的其他方法?

时间:2011-10-04 09:51:11

标签: php javascript html

通常我会做这样的事情:

<select name="myselect">
  <option value="opt1" <?=($_POST['myselect']=="opt1"?"SELECTED":"")?>>Option 1</option>
  <option value="opt2" <?=($_POST['myselect']=="opt2"?"SELECTED":"")?>>Option 2</option>
</select>

但是这次我从这个网站上选择了所有国家/地区的列表:http://snippets.dzone.com/posts/show/376

要完成每一项并进行验证将是疯狂的。

评论中有一个php解决方案,但它看起来有些不雅。

有没有其他方法可以做到这一点或类似的东西?我不想使用javascript,我不确定我是否想依赖浏览器缓存。

由于

3 个答案:

答案 0 :(得分:3)

// I'm using integers as key values in this example. Modify as needed.    
$countries = array(
  1 => 'Some Country',
  // etc...
);

// Sanitize as needed, casting to integer in my example
$selectedCountryCode = isset( $_POST['myselect'] ) ? (int) $_POST['myselect'] : null;

$select = '<select name="myselect">';
foreach( $countries as $countryCode => $countryName )
{
    $selected = $selectedCountryCode == $countryCode ? ' selected="selected"' : '';
    $select .= '<option value="' . $countryCode .'"' . $selected . '>' . $countryName . '</option>';
}
$select .= '</select>';

echo $select;

答案 1 :(得分:0)

将国家/地区添加到value-label数组

使用循环生成选项

foreach ($countries as $value => $label) {
    $isSelected = $_POST['myselect'] == $value ? ' selected="selected"': '';
    echo '<option value="' . $value . '"' . $isSelected . '>' . $label . '</option>';
}

答案 2 :(得分:0)

您可以使用如下数组创建select:

$options = array('opt1' => 'Option1', 'op2' => 'Option2');
foreach ($options as $o => $v)
{
   if ($_POST['myselect'] == $o)
      echo '<option value="' . $o . '" selected="selected">' . $v . '</option>';
   else
      echo '<option value="' . $o . '">' . $v . '</option>';
}