2010-04-12 40 views
0

我從form_dropdown得到一個奇怪的行爲 - 基本上,當我在驗證後重新加載頁面時,這些值被搞砸了。CodeIgniter中的form_dropdown

該位產生與天,3名月下拉列表和年:

$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 "</pre>";//remove this 
     } 

     $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 "<p>"; 
      echo form_label('Select date:', 'day', array('class' => 'left')); 
      echo form_dropdown('day', $days, $selected_day, 'class="combosmall"'); 
      echo form_dropdown('month', $months, $selected_month, 'class="combosmall"'); 
      echo form_dropdown('year', $years, $selected_year, 'class="combosmall"'); 
     echo "</p>"; 

...併產生這樣的:

<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開始。山姆e發生在幾天和幾個月,但顯然它在這種特殊情況下沒有任何區別,因爲值始終爲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."; 
    } 
+0

當你說「驗證後重新加載頁面」是否意味着你正在通過表單驗證類運行它?如果是這樣,你設定了哪些驗證規則? – musoNic80 2010-04-12 17:57:18

+0

我在上面的帖子中添加了驗證規則。 – Patrick 2010-04-12 19:14:17

回答

0

不知道爲什麼發生這種情況。一切看起來都不錯(儘管你可能不需要「必需的」和你的用戶定義的檢查!)。也許嘗試使用一個不同的變量作爲你的櫃檯幾天,幾周和幾年。即。

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

我不知道這是否會工作或爲什麼它應該比任何你有什麼更好的,但可能是值得一試?!?

如果它不起作用,請在將每個數組發送到form_dropdown方法之前,先通過var_dump()將每個數組放在一起,以查看它是否出現錯誤,以及是否在輔助函數中發生了什麼變化。當然,在純php中編寫代碼並不需要太多的額外工作,而不是使用幫助器! ;-)

+0

我已經改變了變量,現在它可以工作。但是,我認爲這並沒有解決它,因爲即使我修改並保存了文件,它仍然會產生錯誤。可能該文件被緩存或因某種原因沒有得到更新,並且可能還在加載之前版本的錯誤:最後一條語句是$ years [] = $ y無論如何都是非常WEIRD!請關注它 – Patrick 2010-04-12 20:12:41

+0

是的,請確保您沒有從緩存版本或舊版本重新加載頁面。手指交叉現在解決了。不要忘記接受我的答案,如果事實證明有幫助! – musoNic80 2010-04-12 20:23:49

相關問題