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'>". $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
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
Validation Passed View
Welcome Validation Passed.
<?php echo "<br />" . "Name Value = " . set_value('name') . "<br />"; ?>
<?php echo "Gender Value = " . set_value('gender'); ?>
Upvotes: 0
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
Reputation: 2223
Why not just use the post value?
echo form_dropdown('name', $options, $this->input->post('name'));
Upvotes: 2
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>
<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
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
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
Reputation: 893
<option value="<?= $row->state_name ?>" ><?= $row->state_name ?></option>
Upvotes: -1