Creating a dynamically generated select menu with PHP has some advantages, such as tidier code, consistency and form validation. The purpose of this tutorial is to show you a quicker way to generate select menu <options> without spending a lot of time hand coding a list that, in this case, may contain 50 entries.
Before the greatest thing since sliced bread, that would be PHP, a select menu list of the states would’ve looked like this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>US States List in Select Menu with PHP</title> </head> <body> <form name="us_states" method="post" action="us_states_list.php"> <select name="us_states"> <option value="">Select State</option> <option value="AL">Alabama</option> <option value="AK">Alaska</option> <option value="AZ">Arizona</option> <option value="AR">Arkansas</option> <option value="CA">California</option> <option value="CO">Colorado</option> <option value="CT">Connecticut</option> <option value="DE">Delaware</option> <option value="DC">District Of Columbia</option> <option value="FL">Florida</option> <option value="GA">Georgia</option> <option value="HI">Hawaii</option> <option value="ID">Idaho</option> <option value="IL">Illinois</option> <option value="IN">Indiana</option> <option value="IA">Iowa</option> <option value="KS">Kansas</option> <option value="KY">Kentucky</option> <option value="LA">Louisiana</option> <option value="ME">Maine</option> <option value="MD">Maryland</option> <option value="MA">Massachusetts</option> <option value="MI">Michigan</option> <option value="MN">Minnesota</option> <option value="MS">Mississippi</option> <option value="MO">Missouri</option> <option value="MT">Montana</option> <option value="NE">Nebraska</option> <option value="NV">Nevada</option> <option value="NH">New Hampshire</option> <option value="NJ">New Jersey</option> <option value="NM">New Mexico</option> <option value="NY">New York</option> <option value="NC">North Carolina</option> <option value="ND">North Dakota</option> <option value="OH">Ohio</option> <option value="OK">Oklahoma</option> <option value="OR">Oregon</option> <option value="PA">Pennsylvania</option> <option value="RI">Rhode Island</option> <option value="SC">South Carolina</option> <option value="SD">South Dakota</option> <option value="TN">Tennessee</option> <option value="TX">Texas</option> <option value="UT">Utah</option> <option value="VT">Vermont</option> <option value="VA">Virginia</option> <option value="WA">Washington</option> <option value="WV">West Virginia</option> <option value="WI">Wisconsin</option> <option value="WY">Wyoming</option> </select> <p><input name="submit" type="submit" value="Submit" /></p> </form> </body> </html> |
The same HTML output can be possible using an array() and the good ol’ echo function in PHP:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>US States List in Select Menu with PHP</title> </head> <body> <form name="us_states" method="post" action="us_states_list.php"> <?php // Credit for the USA states list as a PHP array belongs to DZone Snippets, thanks mates! // http://snippets.dzone.com/posts/show/1038 $us_states = array('AL'=>"Alabama", 'AK'=>"Alaska", 'AZ'=>"Arizona", 'AR'=>"Arkansas", 'CA'=>"California", 'CO'=>"Colorado", 'CT'=>"Connecticut", 'DE'=>"Delaware", 'DC'=>"District Of Columbia", 'FL'=>"Florida", 'GA'=>"Georgia", 'HI'=>"Hawaii", 'ID'=>"Idaho", 'IL'=>"Illinois", 'IN'=>"Indiana", 'IA'=>"Iowa", 'KS'=>"Kansas", 'KY'=>"Kentucky", 'LA'=>"Louisiana", 'ME'=>"Maine", 'MD'=>"Maryland", 'MA'=>"Massachusetts", 'MI'=>"Michigan", 'MN'=>"Minnesota", 'MS'=>"Mississippi", 'MO'=>"Missouri", 'MT'=>"Montana", 'NE'=>"Nebraska", 'NV'=>"Nevada", 'NH'=>"New Hampshire", 'NJ'=>"New Jersey", 'NM'=>"New Mexico", 'NY'=>"New York", 'NC'=>"North Carolina", 'ND'=>"North Dakota", 'OH'=>"Ohio", 'OK'=>"Oklahoma", 'OR'=>"Oregon", 'PA'=>"Pennsylvania", 'RI'=>"Rhode Island", 'SC'=>"South Carolina", 'SD'=>"South Dakota", 'TN'=>"Tennessee", 'TX'=>"Texas", 'UT'=>"Utah", 'VT'=>"Vermont", 'VA'=>"Virginia", 'WA'=>"Washington", 'WV'=>"West Virginia", 'WI'=>"Wisconsin", 'WY'=>"Wyoming"); // Create the <select> tag and set a default <option> with an empty value echo '<select name="us_states">' ."\n"; echo ' <option value="">Select State</option>' ."\n"; // Using the foreach function is much better than using the for function to get the array elements. // Instead of writing $us_states[$i] as is the case with the for function, you can make each element // a variable and assign it its corresponding value foreach($us_states as $option => $value) { echo ' <option value="' .$option .'"'; // If you're validating your form using the same page, this will append "selected" to // the <option> after you submit the form. Else just closes the <option> echo ($_POST["us_states"] == $option) ? " selected>" : ">"; echo $value ."</option>" ."\n"; } echo " </select>" ."\n"; ?> <p><input name="submit" type="submit" value="Submit" /></p> </form> </body> </html> |
See Demo here.
You can take advantage of dynamically generated HTML by PHP to output just about anything and I recommend it whenever possible.