user2092317
user2092317

Reputation: 3338

how to repopulating a dropdown in codeigniter after form validation fails?

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

Upvotes: 2

Views: 10729

Answers (7)

Mohammad Naim Dahee
Mohammad Naim Dahee

Reputation: 939

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'); ?>

Upvotes: 0

user2092317
user2092317

Reputation: 3338

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

Upvotes: 0

suncoastkid
suncoastkid

Reputation: 2223

Why not just use the post value?

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

Upvotes: 2

Steward Godwin Jornsen
Steward Godwin Jornsen

Reputation: 1179

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

Upvotes: 13

kidonchu
kidonchu

Reputation: 787

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.

Upvotes: 4

christian.thomas
christian.thomas

Reputation: 1122

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

Upvotes: 0

Girish
Girish

Reputation: 893

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

Upvotes: -1

Related Questions