2013-05-22 128 views
0

我正在开发一个注册/注册表单,在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>      
+0

要选择输入吗? –

+0

嗨,是啊,这几乎是我想要它做的。如果我的错误消息显示'日期无效',我希望用户选择的值仍然被选中并可见(例如,如果他们选择2013年2月29日,那么当表单重新加载/重新提交这些值仍将被选中) –

回答

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

+1

作品完美,谢谢! –

+1

欢迎您:-) –

1

你在做错的方式。

请使病情每个选项里面像下面

<option value="2013" <?php if(isset($_POST['year']) && $_POST['year']==2013){ echo "selected";}?>>2013</option> 

以同样的方式为一个月。

+0

好的,谢谢,唯一的问题是我有很多选项(例如年份超过100个选项),是否有更短的方法来实现这个每个选项? –

+0

是的,您可以使用for循环并动态生成下拉列表,在这种情况下您只需要创建一个条件。 –

1

With选择您不能设置值...相反,您必须将选定的属性添加到选择选项元素。

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

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>"; 
} 

$名称是的元件 $选项名称的形式为“请将option_value” =>“option_label” $阵列选的是该选择选项 $ attr的值被附加属性的阵列,以选择元件上放(风格ID等)

例如

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

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

啊,好吧,这看起来不错。你可以给我一个例子使用我的代码(也许几天)应该去哪里?我对PHP仍然很陌生。 –

+0

展示示例 – Orangepill