在表单提交验证后重新填充下拉菜单选项

时间:2013-05-22 04:31:55

标签: php html drop-down-menu

我正在使用php中的注册/注册表单,如果一切都没有正确验证,则重新提交/保留用户输入。我有文本框,密码输入和单选按钮都工作,但这些下拉菜单更麻烦。我使用的PHP代码适用于文本框但不适用于这些选择/选项,有没有更好的方法来做到这一点?为了节省空间,我已经删除了大部分选项,但每个选项分别为0-11个月,1-31天和1900-2013年。

<select id="month" name="month" value="<?php
    if(isset($_POST['month']))
        echo htmlspecialchars($_POST['month'])?>">

    <option value="default">Month</option>
    <option value="0">January</option>
    ...
    <option value="11">December</option>

</select>
<select id="formDay" name="day" value="<?php
    if(isset($_POST['day']))
        echo htmlspecialchars($_POST['day'])?>">

    <option value="default">Day</option>
    <option value="1">1</option>
    ...
    <option value="31">31</option>

</select>
<select id="formYear" name="year" value="<?php
    if(isset($_POST['year']))
        echo htmlspecialchars($_POST['year'])?>">

    <option value="default">Year</option>
    <option value="2013">2013</option>
    ...
    <option value="1900">1900</option>

 </select>                    

3 个答案:

答案 0 :(得分:1)

你做错了。

请在每个选项中设置条件,如下所示

<option value="2013" <?php if(isset($_POST['year']) && $_POST['year']==2013){ echo "selected";}?>>2013</option>
以同样的方式月份。

答案 1 :(得分:1)

使用选择,您无法设置值...而是必须将选定的属性添加到选择选项元素。

我通常使用这样的函数来构建我的选择

function showSelect($name, $options, $selected, $attr = array()){
    $str = "<select name='".$name.'"';
    foreach($attr as $name=>$val){
        $str.= " ".$name."='".$val."'";
    }
    $str.=">";
    foreach($options as $k=>$val){
        $str.= "<option value='".$val."'".($val==$selected?" selected='selected'":"").">".$k.'</option>';
    }
    $str.="</select>";
}

$ name是元素的名称 $ options是“option_value”=&gt;“option_label”形式的数组 $ selected是选择选项的值 $ attr是要放在select元素(样式id等)

上的附加属性的数组

例如

$days = array();
for($d = 1; $x<=31; $x++){
     $days[(string)$d] = (string)$d;
}

echo showSelect("formDays", $days, $_POST["formDays"], array("id"=>"formDays"));

答案 2 :(得分:1)

您可以尝试这样做,动态生成值

日期:

echo "<select name='day'>";
for( $i = 1; $i <= 31; $i++ )
{
    $selectedDay = isset($_POST['day']) && $_POST['day'] == $i ? 'selected="selected"' : ''; 
    echo "<option $selectedDay value=$i>$i</option>";
}
echo "</select>";

<强>月:

$months = array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
echo "<select name='month'>";
for( $i = 0; $i <= 11; $i++ )
{
    $m = $months[$i];
    $selectedMonth = isset($_POST['month']) && $_POST['month'] == $i ? 'selected="selected"' : ''; 
    echo "<option $selectedMonth value=$i>$m</option>";
}
echo "</select>";

<强>年份:

echo "<select name='year'>";
for( $i = 2013; $i >= 1900; $i-- )
{
    $selectedYear = isset($_POST['year']) && $_POST['year'] == $y ? 'selected="selected"' : ''; 
    echo "<option $selectedYear value=$i>$i</option>";
}
echo "</select>";

Demo NormalDemo Selected