2012-02-21 54 views
0

我已經在CodeIgniter中創建了一個選擇框。當我從數據庫中提取值時,表單填充沒有問題。但在提交表單後,選擇框會重置爲零。CodeIgniter set_select post後不重新填充

這裏是我的代碼:

<select name="week[tuesday][startam]" id="" class="small"> 
    <?php for($i = 0; $i < 24; $i=$i + 0.25):?> 
      <option value="<?php echo $i; ?>"<?php echo set_select('week[tuesday][startam]', $i, ($i==(float)$model_week['tuesday']['startam'])); ?>><?php printf('%02d:%02d', floor($i), (($i-floor($i))*60)); ?></option> 
    <?php endfor; ?> 
</select> 

我想知道的問題是,set_select()是比較$_POST[week][tuesday][startam]值(這是一個字符串)$i(這是一個浮動)。但是將$i轉換爲字符串似乎沒有什麼區別。

任何想法?

+0

你可以發佈你的控制器嗎?至少是表單驗證部分。 – applechief 2012-02-21 17:50:38

+0

我認爲你正在做的事情:我不認爲我已經將它們添加到規則數組 - 將添加和重新測試。 – JasonC 2012-02-21 18:14:46

+0

現在添加到驗證規則,它似乎工作正常。問題解決了。感謝您的建議,@chaft。 – JasonC 2012-02-21 18:32:55

回答

2

多虧了@chaft的評論,我在我的驗證規則又看了一下,發現該領域我擔心錯過。我將它們添加到規則集中,現在一切都按預期工作。所以,上面的代碼我貼我:

$validation_rules = array(
    array(
     'field' => 'week[tuesday][startam]', 
     'label' => 'Tuesday morning start', 
     'rules' => 'trim' 
    ) 
) 
$this->form_validation->set_rules($validation_rules); 
$is_valid = $this->form_validation->run(); 
0

你提交之後,可能是因爲,對於$ model_week無始值「星期二」] [「startam」],因此,沒有set_select具有第三參數組爲TRUE

檢查$ _ POST,如果設置,將值設置爲發佈值;

if($_POST){ 
    $model_week['tuesday']['startam']=$_POST['week']['tuesday']['startam']; 
}else{ 
    $model_week['tuesday']['startam']=5;//or initial db value 
} 

<select name="week[tuesday][startam]" id="" class="small"> 
     <?php for($i = 0; $i < 24; $i=$i + 0.25):?> 
       <option value="<?php echo $i; ?>"<?php echo set_select('week[tuesday][startam]', $i, "FALSE"); ?>><?php printf('%02d:%02d', floor($i), (($i-floor($i))*60)); ?></option> 
     <?php endfor; ?> 
    </select> 

^看如果你能得到的代碼永遠比00:00

你不能等一個選擇的值。因爲如果沒有set_selected選項將第三個參數設置爲TRUE,您將永遠不會選擇一個選項,無論是在默認頁面加載還是在表單提交之後。


繼承人快速和骯髒的例子:

public function index(){ 
    if($_POST){ 
     $model_week['tuesday']['startam']=$_POST['week']['tuesday']['startam']; 
    }else{ 
     $model_week['tuesday']['startam']=5;//would be the default value 
    } 
?> 
<form action="" method="POST" accept-charset="utf-8"> 
    <select name="week[tuesday][startam]" id="" class="small"> 
     <?php for($i = 0; $i < 24; $i=$i + 0.25):?> 
      <option value="<?php echo $i; ?>" 
       <?php echo set_select('week[tuesday][startam]', $i, ($i==(float)$model_week['tuesday']['startam'])); ?>> 
       <?php printf('%02d:%02d', floor($i), (($i-floor($i))*60)); ?> 
      </option> 
     <?php endfor; ?> 
    </select> 
    <input type="submit" name="some_name" value="rrrr" id="some_name"> 
    </form> 
<?php 
} 
+0

它不需要設置爲true,因爲第三個參數僅在* not * submitting時使用。提交之後,默認值並不重要,因爲您只是試圖用剛剛提交的值填充表單,而不是默認值。 – JasonC 2012-02-21 18:12:44

+0

那麼如何用提交的值填充表單呢?魔法?不,你有一個選項值設置爲SELECTED與提交的值! set_selected不僅適用於默認值,您可以使用它來設置要選擇的值。 – stormdrain 2012-02-21 18:18:30

+0

是的,沒錯,但是您討論的第三個參數僅用於在** not **提交時設置默認值。表單助手通過比較postdata和'set_select()'的第二個參數來設置'SELECTED'。第三個參數是可選的,助手仍然可以使用_without_使用魔法。 – JasonC 2012-02-21 18:31:45

0

我遇到了同樣的問題,像什麼JasonC那樣,驗證表單工作。我有2個領域,但只有1個在發佈後正確設置。我沒有想到表單驗證會導致這樣的問題。感謝chaft!