Phases Posted July 21, 2011 Share Posted July 21, 2011 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? Quote Link to comment https://forums.phpfreaks.com/topic/242498-select-option-in-dropdown-list-based-on-what-a-variable-is-set-to/ Share on other sites More sharing options...
tecno40 Posted July 21, 2011 Share Posted July 21, 2011 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. Quote Link to comment https://forums.phpfreaks.com/topic/242498-select-option-in-dropdown-list-based-on-what-a-variable-is-set-to/#findComment-1245456 Share on other sites More sharing options...
Phases Posted July 21, 2011 Author Share Posted July 21, 2011 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! Quote Link to comment https://forums.phpfreaks.com/topic/242498-select-option-in-dropdown-list-based-on-what-a-variable-is-set-to/#findComment-1245460 Share on other sites More sharing options...
Phases Posted July 21, 2011 Author Share Posted July 21, 2011 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? Quote Link to comment https://forums.phpfreaks.com/topic/242498-select-option-in-dropdown-list-based-on-what-a-variable-is-set-to/#findComment-1245466 Share on other sites More sharing options...
PFMaBiSmAd Posted July 21, 2011 Share Posted July 21, 2011 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. Quote Link to comment https://forums.phpfreaks.com/topic/242498-select-option-in-dropdown-list-based-on-what-a-variable-is-set-to/#findComment-1245469 Share on other sites More sharing options...
Phases Posted July 21, 2011 Author Share Posted July 21, 2011 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? Quote Link to comment https://forums.phpfreaks.com/topic/242498-select-option-in-dropdown-list-based-on-what-a-variable-is-set-to/#findComment-1245675 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.