form_dropdown в CodeIgniter - PullRequest
       8

form_dropdown в CodeIgniter

0 голосов
/ 12 апреля 2010

Я получаю странное поведение от 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.";
    }

1 Ответ

0 голосов
/ 12 апреля 2010

Не уверен, почему это происходит.Все выглядит хорошо (хотя вам, вероятно, не нужен 'обязательный' и ваш пользовательский чек!).Возможно, попробуйте использовать другую переменную в качестве счетчика для дней, недель и лет.то есть.

$days = array(0 => 'Day...');
    for ($d = 1; $d <= 31; $d++)
    {
        $days[] = $d;
    }
    $months = array(0 => 'Month...', );
    for ($m = 1; $m <= 12; $m++)
    {
        $months[] = $m;
    }
    $years = array(0 => 'Year...');
    for ($y = 2010; $y <= 2012; $y++)
    {
        $years[$y] = $y; 
    }

Я не уверен, сработает ли это или почему это должно быть лучше, чем у вас, но, возможно, стоит попробовать?!?

Если это не такЧтобы работать, поместите каждый массив с помощью var_dump (), прежде чем отправлять его в метод form_dropdown, чтобы увидеть, что-то не так с генерацией массива или что-то смешное в вспомогательной функции.Конечно, не было бы много дополнительной работы, чтобы написать код на чистом php, а не использовать помощник!; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...