Заполнение списка выпадающего меню после проверки формы отправки

Я работаю над формой регистрации / регистрации в php, которая повторно вводит / сохраняет входные данные пользователей, если все не проверено правильно. У меня есть текстовое поле, ввод пароля и все переключатели, но у этих выпадающих меню больше проблем. Используемый мной PHP-код работает для текстовых полей, но не для этих select / options, есть ли лучший способ сделать это? Я сократил большинство вариантов только для экономии места, но каждый из них идет от 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> 

Вы можете попробовать это, генерировать значения динамически

День:

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

Демо нормальный и демонстрационный

Вы делаете не так.

пожалуйста, сделайте условие внутри каждого варианта, как показано ниже

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

таким же образом за месяц.

При выборе вы не можете установить значение … вместо этого вы должны добавить выбранный атрибут к элементу выбора.

Обычно я использую такую ​​функцию, чтобы строить свои избранные

 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» => «option_label» $ selected – это значение опции выбора. $ attr – это массив дополнительных атрибутов для добавления элемента select (style id и т.д.)

Например

 $days = array(); for($d = 1; $x<=31; $x++){ $days[(string)$d] = (string)$d; } echo showSelect("formDays", $days, $_POST["formDays"], array("id"=>"formDays"));