2011-07-13 22 views
1

我有一個非常簡單的投票表單。它包含一個用於條目ID的單個文本字段,然後包含五個下拉列表。唯一正在進行的驗證是在文本字段上,但如果失敗,我希望所有下拉列表保留其值。在CodeIgniter驗證失敗後重置下拉值

例如,用戶輸入12345作爲條目,然後從所有五個下拉列表中選擇選項A. (選項B是默認值。)如果12345未通過驗證,則在顯示驗證錯誤時,仍應將下拉列表設置爲選項A.這沒有發生。我使用表單助手的form_dropdown來創建下拉菜單。有任何想法嗎?正如你所看到的,我嘗試在名爲q1的下拉列表中使用set_value,但它不起作用。驗證本身確實有效。

下面是窗體的代碼:

<?php 
$hidden = array('dot_judge_id' => $this->session->userdata('dot_judge_id')); 

echo form_open('vote/create'); 
$entry_code_data = array(
    'name' => 'entry_code', 
    'id' => 'entry_code', 
    'value' => set_value('entry_code') 
); 

echo form_hidden($hidden); 

$score_options = array('1'=>'1 (lowest)', '2'=>'2','3'=>'3', '4'=>'4','5'=>'5 (highest)'); 
?> 

<p><label for="entry_code">Entry code: </label><?php echo form_input($entry_code_data); ?></p> 
<p><label for="q1">Question 1: </label><?php echo form_dropdown('q1', $score_options, set_value('q1')); ?></p> 
<p><label for="q2">Question 2: </label><?php echo form_dropdown('q2', $score_options, ''); ?></p> 
<p><label for="q3">Question 3: </label><?php echo form_dropdown('q3', $score_options, ''); ?></p> 
<p><label for="q4">Question 4: </label><?php echo form_dropdown('q4', $score_options, ''); ?></p> 
<p><label for="q5">Question 5: </label><?php echo form_dropdown('q5', $score_options, ''); ?></p> 

<p><?php echo form_submit('submit', 'Submit vote'); ?></p>     

<?php echo form_close(); ?> 
<?php echo validation_errors('<p class="error">', '</p>');?> 

我已經有人在論壇笨告訴我使用set_select,但我不認爲我可以使用set_select,因爲我不寫取出選擇框的各個值,我也不想提供硬編碼的默認值。我需要將下拉菜單重置爲用戶在運行表單驗證之前選擇的值。我正在使用form_dropdown函數,那麼如何才能將實際選定的值傳遞給set_select的第二個參數?按照set_select文檔,

第一個參數必須包含選擇菜單的名稱, 第二個參數必須包含每個項目

還有上this post評論的價值那說使用set_value - echo form_dropdown('events', $options, set_value('events'), $firstItem);。評論得到三張選票,所以我認爲它適用於某些人,但對我沒有任何幫助。那個問題已經一歲了,也許這是在一個較舊版本的CI中工作,但不是最新版本。在任何情況下,在使用form_dropdown創建下拉列表時,都有一種「粘性」下拉值的方式,不是嗎?我無法想象我需要做很長時間,並通過循環訪問各個值並分別回顯每個選項行來創建下拉列表;這首先破壞了使用類似CI的東西的目的。

回答

4

請記住,set_value()需要第二個參數,即每個項目的值,因此您可以通過將$this->input->post('q1')作爲第二個參數來使其工作。

相反的:

<?php echo form_dropdown('q1', $score_options, set_value('q1')); ?> 

你可以寫成:

<?php echo form_dropdown('q1', $score_options, set_value('q1', $this->input->post('q1'))); ?> 

希望有所幫助。

+0

謝謝!我想知道爲什麼entry_code字段會保存它的值,當傳入的數組只有''value'=> set_value('entry_code')'而沒有第二個參數'$ this-> input-> post(' entry_code')'。 – EmmyS