2011-07-13 49 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