2011-10-04 57 views
2

通常我会做这样的事情:在验证表单期间设置select元素的值的替代方法?

<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
// 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; 
+0

辉煌的我数据包络分析。对于所有需要它的人 - 这里是一个php数组中的国家列表:http://www.ustrem.org/en/articles/array-list-countries-en/ –

0

国家加入value-label阵列

生成具有循环

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

选项,您可以创建选择用这样的数组:

$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>'; 
}