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

如何在表单验证失败后重新填充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>

hi, i am facing problem in the above code, please help me, set_value is not working for me, dropdown is not populating after form validation fails , thanks in advance or

does something like this works, here target is hidden value. now how to set target value to drop down value(option value)

  <script>
    window.onload = function (){
    target=document.getElementById('target').value;
        if(target.length!=''){
   // document.getElementByName('state').value=target;
        }
    }
    </script>
 &lt; select style =“width:25%;”  name ='state'&lt;?php if(form_error('state')!=''){echo'id = error';  }&gt;&gt; 
&lt; option value =''&gt;状态&lt; /选项&gt; 
&lt;?php foreach($ states-&gt; result()as $ row)
 {
 echo“&lt;  option value ='$ row-&gt; state_name'&gt;“。  $ row-&gt; state_name。“&lt; / option&gt;”; 
}?&gt; 
&lt; / select&gt; 
  code>  pre> 
 
 

嗨,我正面临问题 在上面的代码中,请帮助我, set_value对我不起作用,在表单验证失败后没有填充下拉列表,提前感谢 或 p>

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

 &lt; script&gt; 
 window.onload = function(){
 target = document.getElementById(  'target')。value; 
 if(target.length!=''){
 // document.getElementByName('state')。value = target; 
} 
} 
&lt; / script&gt;  
  code>  pre> 
  div>

According to the manual:

<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>

In your case

<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>

Just remove TRUE from set_select if you don't want to set a default value

If you use a menu, this function permits you to display the menu item that was selected. The first parameter must contain the name of the select menu, the second parameter must contain the value of each item, and the third (optional) parameter lets you set an item as the default (use boolean TRUE/FALSE).

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

You should be using set_select(), not set_value(). Unless your form validation isn't firing at all..

<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>

Let me know if that's still not working, and it's perhaps something to do with the Form Validation not firing (unless id="error" is showing).

If you use form helper function, you can do the following.

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

set_value will select the option value if post with 'name' was submitted last time. If not, it will set it with 'default' 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>

This worked for me. Thanks for the answer @jornsen.

Why not just use the post value?

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

Here we have a better way for populating select value after a form validation run FALSE In Codeigniter. Here is the CODE Snippet.

Following is my Controller.

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

My Views

  1. Form View -(Note: I tried to paste my code but there was a problem with pasting, So here I am Proving a picture of my code. click on Image to see code better.)

Form View Code

Validation Passed View

Welcome Validation Passed.

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