Webbly Brown
Webbly Brown

Reputation: 1002

Whats the best way to show selected options on a form when reloaded using PHP

I would like the select option the user selected to be shown when the form is reloaded. I am currently using bootstrap select picker to style the drop down. Right now I am creating an array and echoing out a selected class based on the value stored in the database.

This is not a major problem with a small amount of options like the code provided below, however with a select box with larger amounts of options this obviously amounts to lots of extra code.

There must be a smarter way to do this than the code i'm using below. Can anyone help?

<select class="selectpicker" name="Do_You_Have_A_Job_Spec_You_Can_Email">
            <option value="" <?php if ($user_data_array['Do_You_Have_A_Job_Spec_You_Can_Email'] == '') echo "selected='selected'"; ?>>Please Select</option>
            <option value="Yes" <?php if ($user_data_array['Do_You_Have_A_Job_Spec_You_Can_Email'] == 'Yes') echo "selected='selected'"; ?>>Yes</option>
            <option value="No" <?php if ($user_data_array['Do_You_Have_A_Job_Spec_You_Can_Email'] == 'No') echo "selected='selected'"; ?>>No</option>
</select>

Upvotes: 1

Views: 89

Answers (3)

Banzay
Banzay

Reputation: 9470

Here is more readable solution:

<select class="selectpicker" name="Do_You_Have_A_Job_Spec_You_Can_Email">
    <option value=
<?php 
$choise = $user_data_array['Do_You_Have_A_Job_Spec_You_Can_Email'];

    switch ($choise) {
        case 'Yes':
               echo '"Yes" selected="selected" >Yes';
               break;
        case  'No':
               echo '"No" selected="selected" >No';
               break;
        case    '':
               echo '""  selected="selected" >Please Select';
               break;
}
?>
    </option>
</select>

Upvotes: 0

Nana Partykar
Nana Partykar

Reputation: 10548

<?php
$text = $user_data_array['Do_You_Have_A_Job_Spec_You_Can_Email'];
?>

<select class="selectpicker" name="Do_You_Have_A_Job_Spec_You_Can_Email">
  <option value="">Please Select</option>
  <option value="Yes" <?php echo $text == 'Yes' ? 'selected' : ''; ?>> Yes </option>
  <option value="No" <?php echo $text == 'No' ? 'selected' : ''; ?>> No </option>
</select>

Alternative Way

"..however with a select box with larger amounts of options this obviously amounts to lots of extra code.".

In this case, when you are having lots of data for dropdown. You can create a table where you can have both option name and option value.

job_specification_table

id  option_value    option_name
1                   Please Select
2      Yes               Yes
3      No                No
.
.
.

Then, retreive those values and check for user_data and according to it, option will get selected.

<?php
$sql = "SELECT * FROM job_specification_table";
$result = mysqli_query($db_con,$sql); 
$text = $user_data_array['Do_You_Have_A_Job_Spec_You_Can_Email'];
?>
<select class="selectpicker" name="Do_You_Have_A_Job_Spec_You_Can_Email">
  <?php
  while ($row = mysqli_fetch_array($result)){
    $option_value = $row['option_value'];
    $selected = ($option_value == $text) ? "selected" : "";
    ?>
    <option value="<?=$option_value;?>" <?=$selected;?>>
      <?=$row['option_name'];?>
    </option>
  <?php }?>
</select>

Upvotes: 0

Zakaria Acharki
Zakaria Acharki

Reputation: 67525

If the option's are static you could use ternary operators, so it will be something like :

<?php $selected_option = $user_data_array['Do_You_Have_A_Job_Spec_You_Can_Email']; ?>

<select class="selectpicker" name="Do_You_Have_A_Job_Spec_You_Can_Email">
   <option value="" <?php echo $selected_option==''?'selected':''; ?>>Please Select</option>
   <option value="Yes" <?php echo $selected_option=='Yes'?'selected':''; ?>>Yes</option>
   <option value="No" <?php echo $selected_option=='No'?'selected':''; ?>>No</option>
</select>

Hope this helps.

Upvotes: 1

Related Questions