Jump to content

'select' option in dropdown list based on what a variable is set to


Phases

Recommended Posts

There is bound to be a better way to do this and I'm ashamed to say it's not hitting me. I'm serving up previously submitted profile information to users and letting them edit it by submitting it back. Therefore of course, I what they already have submitted to be default for all fields. For dropdowns, I'm sadly doing this:

 

<td>    <font size="2"><strong>Gender:</strong></font></td>

    		
// get values from database up there ^^ and set $gender to whatever they've previously selected, if anything
<td><select name="gender">
<?php if ($gender == '') { ?>
<option value="" selected></option><option value="Male">Male</option><option value="Female">Female</option></select></td>
<?php } if ($gender == 'Male') { ?>
<option value=""></option><option value="Male" selected>Male</option><option value="Female">Female</option></select></td>
<?php } if ($gender == 'Female') { ?>
<option value=""></option><option value="Male">Male</option><option value="Female" selected>Female</option></select></td>
<?php } ?>

 

Well. This works great. Unfortunately it also comes with the added benefit of being a pain in my rear. Sure, no big deal with a male/female dropdown - but imagine something like astrological sign or days of the month.

 

Can someone point me in the right direction?

Link to comment
Share on other sites

Well this isn't much more efficient, but this is what I do

 

<?php
echo '<td><select name="gender">';
echo '<option value="" ';
if ($gender == ''){echo 'selected';}
echo '></option>';
echo '<option value="male" ';
if ($gender == 'male'){echo 'selected';}
echo '></option>';
echo '<option value="female" ';
if ($gender == 'female'){echo 'selected';}
echo '></option></select></td>';
?>

 

You could also make a loop to do this, but it might not be much more efficient unless you have a ton of entries.

Link to comment
Share on other sites

Well that's not bad.. I feel stupid - I do this sorta logic all over the place, why didn't it hit me? You the man (or woman?)!

 

I mean, at least this way I'm really only writing each dropdown list once, I just have to put a <?php echo if......echo 'selected'; ?> in each option.  So I can go from this:

 

<td><select name="sign">
<?php if ($sign == '') { ?>
<option value="" selected></option><option value="Aries">Aries</option><option value="Aquarius">Aquarius</option><option value="Cancer">Cancer</option><option value="Capricorn">Capricorn</option><option value="Gemini">Gemini</option><option value="Leo">Leo</option><option value="Libra">Libra</option><option value="Pisces">Pisces</option><option value="Sagittarius">Sagittarius</option><option value="Scorpio">Scorpio</option><option value="Taurus">Taurus</option><option value="Virgo">Virgo</option></select></td>
<?php } if ($sign == 'Aries') { ?>
<option value=""></option><option value="Aries" selected>Aries</option><option value="Aquarius">Aquarius</option><option value="Cancer">Cancer</option><option value="Capricorn">Capricorn</option><option value="Gemini">Gemini</option><option value="Leo">Leo</option><option value="Libra">Libra</option><option value="Pisces">Pisces</option><option value="Sagittarius">Sagittarius</option><option value="Scorpio">Scorpio</option><option value="Taurus">Taurus</option><option value="Virgo">Virgo</option></select></td>
<?php } if ($sign == 'Aquarius') { ?>
<option value=""></option><option value="Aries">Aries</option><option value="Aquarius" selected>Aquarius</option><option value="Cancer">Cancer</option><option value="Capricorn">Capricorn</option><option value="Gemini">Gemini</option><option value="Leo">Leo</option><option value="Libra">Libra</option><option value="Pisces">Pisces</option><option value="Sagittarius">Sagittarius</option><option value="Scorpio">Scorpio</option><option value="Taurus">Taurus</option><option value="Virgo">Virgo</option></select></td>
<?php } if ($sign == 'Cancer') { ?>
<option value=""></option><option value="Aries">Aries</option><option value="Aquarius">Aquarius</option><option value="Cancer" selected>Cancer</option><option value="Capricorn">Capricorn</option><option value="Gemini">Gemini</option><option value="Leo">Leo</option><option value="Libra">Libra</option><option value="Pisces">Pisces</option><option value="Sagittarius">Sagittarius</option><option value="Scorpio">Scorpio</option><option value="Taurus">Taurus</option><option value="Virgo">Virgo</option></select></td>
<?php } if ($sign == 'Capricorn') { ?>
<option value=""></option><option value="Aries">Aries</option><option value="Aquarius">Aquarius</option><option value="Cancer">Cancer</option><option value="Capricorn" selected>Capricorn</option><option value="Gemini">Gemini</option><option value="Leo">Leo</option><option value="Libra">Libra</option><option value="Pisces">Pisces</option><option value="Sagittarius">Sagittarius</option><option value="Scorpio">Scorpio</option><option value="Taurus">Taurus</option><option value="Virgo">Virgo</option></select></td>
<?php } if ($sign == 'Gemini') { ?>
<option value=""></option><option value="Aries">Aries</option><option value="Aquarius">Aquarius</option><option value="Cancer">Cancer</option><option value="Capricorn">Capricorn</option><option value="Gemini" selected>Gemini</option><option value="Leo">Leo</option><option value="Libra">Libra</option><option value="Pisces">Pisces</option><option value="Sagittarius">Sagittarius</option><option value="Scorpio">Scorpio</option><option value="Taurus">Taurus</option><option value="Virgo">Virgo</option></select></td>
<?php } if ($sign == 'Leo') { ?>
<option value=""></option><option value="Aries">Aries</option><option value="Aquarius">Aquarius</option><option value="Cancer">Cancer</option><option value="Capricorn">Capricorn</option><option value="Gemini">Gemini</option><option value="Leo" selected>Leo</option><option value="Libra">Libra</option><option value="Pisces">Pisces</option><option value="Sagittarius">Sagittarius</option><option value="Scorpio">Scorpio</option><option value="Taurus">Taurus</option><option value="Virgo">Virgo</option></select></td>
<?php } if ($sign == 'Libra') { ?>
<option value=""></option><option value="Aries">Aries</option><option value="Aquarius">Aquarius</option><option value="Cancer">Cancer</option><option value="Capricorn">Capricorn</option><option value="Gemini">Gemini</option><option value="Leo">Leo</option><option value="Libra" selected>Libra</option><option value="Pisces">Pisces</option><option value="Sagittarius">Sagittarius</option><option value="Scorpio">Scorpio</option><option value="Taurus">Taurus</option><option value="Virgo">Virgo</option></select></td>
<?php } if ($sign == 'Pisces') { ?>
<option value=""></option><option value="Aries">Aries</option><option value="Aquarius">Aquarius</option><option value="Cancer">Cancer</option><option value="Capricorn">Capricorn</option><option value="Gemini">Gemini</option><option value="Leo">Leo</option><option value="Libra">Libra</option><option value="Pisces" selected>Pisces</option><option value="Sagittarius">Sagittarius</option><option value="Scorpio">Scorpio</option><option value="Taurus">Taurus</option><option value="Virgo">Virgo</option></select></td>
<?php } if ($sign == 'Sagittarius') { ?>
<option value=""></option><option value="Aries">Aries</option><option value="Aquarius">Aquarius</option><option value="Cancer">Cancer</option><option value="Capricorn">Capricorn</option><option value="Gemini">Gemini</option><option value="Leo">Leo</option><option value="Libra">Libra</option><option value="Pisces">Pisces</option><option value="Sagittarius" selected>Sagittarius</option><option value="Scorpio">Scorpio</option><option value="Taurus">Taurus</option><option value="Virgo">Virgo</option></select></td>
<?php } if ($sign == 'Scorpio') { ?>
<option value=""></option><option value="Aries">Aries</option><option value="Aquarius">Aquarius</option><option value="Cancer">Cancer</option><option value="Capricorn">Capricorn</option><option value="Gemini">Gemini</option><option value="Leo">Leo</option><option value="Libra">Libra</option><option value="Pisces">Pisces</option><option value="Sagittarius">Sagittarius</option><option value="Scorpio" selected>Scorpio</option><option value="Taurus">Taurus</option><option value="Virgo">Virgo</option></select></td>
<?php } if ($sign == 'Taurus') { ?>
<option value=""></option><option value="Aries">Aries</option><option value="Aquarius">Aquarius</option><option value="Cancer">Cancer</option><option value="Capricorn">Capricorn</option><option value="Gemini">Gemini</option><option value="Leo">Leo</option><option value="Libra">Libra</option><option value="Pisces">Pisces</option><option value="Sagittarius">Sagittarius</option><option value="Scorpio">Scorpio</option><option value="Taurus" selected>Taurus</option><option value="Virgo">Virgo</option></select></td>
<?php } if ($sign == 'Virgo') { ?>
<option value=""></option><option value="Aries">Aries</option><option value="Aquarius">Aquarius</option><option value="Cancer">Cancer</option><option value="Capricorn">Capricorn</option><option value="Gemini">Gemini</option><option value="Leo">Leo</option><option value="Libra">Libra</option><option value="Pisces">Pisces</option><option value="Sagittarius">Sagittarius</option><option value="Scorpio">Scorpio</option><option value="Taurus">Taurus</option><option value="Virgo" selected>Virgo</option></select></td>
<?php } ?>

 

to this:

 

<option value="" <?php if ($sign == '') { echo 'selected'; } ?>></option><option value="Aries" <?php if ($sign == 'Aries') { echo 'selected'; } ?>>Aries</option><option value="Aquarius" <?php if ($sign == 'Aquarius') { echo 'selected'; } ?>>Aquarius</option><option value="Cancer" <?php if ($sign == 'Cancer') { echo 'selected'; } ?>>Cancer</option><option value="Capricorn" <?php if ($sign == 'Capricorn') { echo 'selected'; } ?>>Capricorn</option><option value="Gemini" <?php if ($sign == 'Gemini') { echo 'selected'; } ?>>Gemini</option><option value="Leo" <?php if ($sign == 'Leo') { echo 'selected'; } ?>>Leo</option><option value="Libra" <?php if ($sign == 'Libra') { echo 'selected'; } ?>>Libra</option><option value="Pisces" <?php if ($sign == 'Pisces') { echo 'selected'; } ?>>Pisces</option><option value="Sagittarius" <?php if ($sign == 'Sagittarius') { echo 'selected'; } ?>>Sagittarius</option><option value="Scorpio" <?php if ($sign == 'Scorpio') { echo 'selected'; } ?>>Scorpio</option><option value="Taurus" <?php if ($sign == 'Taurus') { echo 'selected'; } ?>>Taurus</option><option value="Virgo" <?php if ($sign == 'Virgo') { echo 'selected'; } ?>>Virgo</option></select></td>

 

That's MUCH better. And I have even bigger dropdowns than that. So, this is really going to help me stay sane. I just feel bad seeings how simple this was and how I certainly should have done this from the start, I don't know why I brain farted on this one.

 

Thanks for your time, big help!

Link to comment
Share on other sites

Ok so to expand..

 

I'd make an array using each enum value (the 12 signs plus the blank '') - I can do that, right?

 

Then just do like a.. (and this will be ugly but tryin to be fast)

 

$somethings[] =some array I just made from enums

foreach $something in $somethings..

  echo '<option value=".$something; if ($sign == '$something') echo 'selected'; ?>>$something</option> 

 

...(yes code is ugly and wrong but is my logic right?

Link to comment
Share on other sites

Yes, any time you find yourself repeating blocks of code that only differ in the value being used, you would make an array of the values, iterate over the array, and produce the output you want.

 

For the case of a select menu, where you want to select one (or more) of the options based on a value(s), you would simply test as you are iterating over the array of choices and output the selected='selected' when the current value matches a variable.

 

 

Link to comment
Share on other sites

Ok cool, here is what I'm doing now. Made a function with the suggested array solution at top of page:

 

function makeDropdown ($value, $value2) {

$result = mysql_query("SHOW COLUMNS FROM `user_profile` LIKE '$value'") or die('ooops'); 
$row = mysql_fetch_array($result); 
$type = $row['Type']; 
preg_match('/enum\((.*)\)$/', $type, $matches); 
$vals = explode(',', $matches[1]); 

echo '<select name="'.$value.'">';
foreach ($vals as $val) {
$val = trim($val, "'");
echo '<option value="'.$val.'"';
if ($value2 == $val) echo 'selected';
echo '>'.$val.'</option>';
}
echo '</select>';
}

 

Then where ever I need a dropdown I call the function and pass whatever I need:

 

makeDropdown ('sign', $sign); 

 

It works great!

 

Starting point: http://stackoverflow.com/questions/2350052/how-can-i-get-enum-possible-values-in-a-mysql-database

 

..and then: http://php.net/manual/en/functions.variable-functions.php

 

The only big I don't quite understand yet is the preg_match(); but I'll just read up on it. Thanks for the big help guys. I feel much better now.

 

Side note, if I mark this as solved that does it close the thread or leave it open for more discussion?

 

 

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.