如何在表单验证失败后重新填充codeigniter中的下拉列表?

时间:2013-03-12 17:54:58

标签: php codeigniter

<select style="width:25%;" name='state' <?php if(form_error('state') != '') {  echo 'id=error'; } ?>>
<option value=''>State</option>
 <?php  foreach($states->result() as $row)
 {
 echo "<option value='$row->state_name'>". $row->state_name."</option>";
 }  ?>
</select>

嗨,我在上面的代码中遇到问题,请帮帮我, set_value对我不起作用,表单验证失败后,下拉列表不会填充,提前感谢  或

做这样的事情,这里的目标是隐藏价值。现在如何将目标值设置为下拉值(选项值)

  <script>
    window.onload = function (){
    target=document.getElementById('target').value;
        if(target.length!=''){
   // document.getElementByName('state').value=target;
        }
    }
    </script>

7 个答案:

答案 0 :(得分:12)

根据手册:

<select name="myselect">
        <option value="one" <?php echo  set_select('myselect', 'one', TRUE); ?> >One</option>
        <option value="two" <?php echo  set_select('myselect', 'two'); ?> >Two</option>
        <option value="three" <?php echo  set_select('myselect', 'three'); ?> >Three</option>
</select>

在您的情况下

<select style="width:25%;" name='state' <?php if(form_error('state') != '') {  echo 'id=error'; } ?>>
<option value=''>State</option>
 <?php  foreach($states->result() as $row)
 {
 echo "<option value='$row->state_name' " . set_select('state', $row->state_name) . " >". $row->state_name."</option>";
 }  ?>

</select>

[UPDATE]

<select style="width:25%;" name='state' <?php if(form_error('state') != '') {  echo 'id=error'; } ?>>
    <option value=''>State</option>
     <?php  
$defaultvalue = 'Nigeria'; //Please set default value here when nothing is selected before submit - change Nigeria
foreach($states->result() as $row)
     {
     echo "<option value='$row->state_name' " . set_select('state', $row->state_name, ((!isset(set_select('state', $row->state_name)) &&  ($row->state_name == $defaultvalue) ) ? TRUE : FALSE )) . " >". $row->state_name."</option>";
     }  ?>


</select>

如果您不想设置默认值,请从set_select中删除TRUE

如果使用菜单,此功能允许您显示所选的菜单项。第一个参数必须包含选择菜单的名称,第二个参数必须包含每个项目的值,第三个(可选)参数允许您将项目设置为默认值(使用布尔值TRUE / FALSE)。

答案 1 :(得分:4)

如果使用表单助手功能,则可以执行以下操作。

form_dropdown('name', $options, set_value('name', 'default'))

如果上次提交带有“姓名”的帖子,则

set_value会选择该选项值。如果没有,它将使用“默认”值设置它。

答案 2 :(得分:2)

为什么不使用post值?

echo form_dropdown('name', $options, $this->input->post('name'));

答案 3 :(得分:1)

在表格验证运行FALSE In Codeigniter中,我们有更好的方法来填充选择值。这是CODE代码段。

以下是我的控制器。

function index() {
    $this->load->view('welcome_message');
}

function form_validation() {
    $this->load->library('form_validation');
    $this->form_validation->set_rules('name', 'Name', 'trim|required');
    $this->form_validation->set_rules('gender', 'Gender', 'trim|callback_check_if_gender_selected');

    if ($this->form_validation->run() == FALSE) {
        $this->index();
    } else {
        $this->load->view('validation_passed');
    }
}

function check_if_gender_selected($value) {
    if ($value == "0") {
        $this->form_validation->set_message('check_if_gender_selected', 'Please Select Gender');
        return FALSE;
    } else {
        return TRUE;
    }
}

我的观点

  1. 表单视图 - (注意:我尝试粘贴我的代码,但是粘贴有问题,所以我在这里查看我的代码图片。点击图片查看代码更好。)
  2. Form View Code

    验证通过视图

    Welcome Validation Passed.
    
    <?php echo "<br />" . "Name Value = " . set_value('name') . "<br />"; ?>
    <?php echo "Gender Value = " . set_value('gender'); ?>
    

答案 4 :(得分:0)

您应该使用set_select(),而不是set_value()。除非您的表单验证根本没有解决..

<select style="width:25%;" name='state' <?php if(form_error('state') != '') {  echo 'id=error'; } ?>>
<option value=''>State</option>
 <?php  foreach($states->result() as $row)
 {
 echo '<option value="$row->state_name" ' . set_select('state', $row->state_name) . '>'. $row->state_name."</option>";
 }  ?>
</select>

如果仍然无效,请告诉我,这可能与表单验证未触发有关(除非显示id="error")。

答案 5 :(得分:0)

    <select style="width:25%;" name='state' <?php if(form_error('state') != '') {  echo 'id=error'; } ?>>
    <option value=''>State</option>
     <?php  foreach($states->result() as $row)
     {
     echo "<option value='$row->state_name' " . set_select('state', $row->state_name) . " >". $row->state_name."</option>";
     }  ?>

    </select>

这对我有用。谢谢@jornsen的答案。

答案 6 :(得分:-1)

 <option value="<?= $row->state_name ?>" ><?= $row->state_name ?></option>