Я получаю странное поведение от form_dropdown - в основном, когда я перезагружаю страницу после проверки, значения облажаются.
Этот бит генерирует 3 раскрывающихся списка с днями, месяцами и годами:
<code>$days = array(0 => 'Day...');
for ($i = 1; $i <= 31; $i++)
{
$days[] = $i;
}
$months = array(0 => 'Month...', );
for ($i = 1; $i <= 12; $i++)
{
$months[] = $i;
}
$years = array(0 => 'Year...');
for ($i = 2010; $i <= 2012; $i++)
{
$years[$i] = $i;
echo "<pre>"; print_r($years); echo "
"; // удалить это
}
$ selected_day = (isset ($ selected_day))? $ selected_day: 0;
$ selected_month = (isset ($ selected_month))? $ selected_month: 0;
$ selected_year = (isset ($ selected_year))? $ selected_year: 0;
echo "
";
echo form_label («Выберите дату:», «день», массив («класс» => «слева»));
echo form_dropdown ('day', $ days, $ selected_day, 'class = "combosmall"');
echo form_dropdown ('month', $ month, $ selected_month, 'class = "combosmall"');
echo form_dropdown ('year', $ years, $ selected_year, 'class = "combosmall"');
echo "
";
... и генерирует это:
<p><label for="day" class="left">Select date:</label><select name="day" class="combosmall">
<option value="0" selected="selected">Day...</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select><select name="month" class="combosmall">
<option value="0" selected="selected">Month...</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select><select name="year" class="combosmall">
<option value="0" selected="selected">Year...</option>
<option value="2010">2010</option>
<option value="2011">2011</option>
<option value="2012">2012</option>
</select></p>
Однако, когда форма перезагружается после проверки, тот же код выше генерирует это:
<!-- days and months... -->
<select name="year" class="combosmall">
<option value="0" selected="selected">Year...</option>
<option value="1">2010</option>
<option value="2">2011</option>
<option value="3">2012</option>
</select>
Таким образом, в основном значение начинается с 1, а не с 2010 года. То же самое происходит с днями и месяцами, но, очевидно, это не имеет никакого значения в данном конкретном случае, поскольку значения в любом случае начинаются с 1.
Как я могу это исправить - и почему это происходит?
изменить: правила проверки:
$this->load->library('form_validation');
//...rules for other fields..
$this->form_validation->set_rules('day', 'day', 'required|xss_clean');
$this->form_validation->set_rules('month', 'month', 'required|xss_clean');
$this->form_validation->set_rules('year', 'year', 'required|xss_clean');
$this->form_validation->set_error_delimiters('<p class="error">', '</p>');
//define other errors
if($this->input->post('day') == 0 || $this->input->post('month') == 0 || $this->input->post('year') == 0)
{
$data['error'] = "Please check the date of your event.";
}