Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using PHP to populate a <select></select>?

<select name="select">
      
</select>

I want to populate the above tag with values from database.

I have written PHP code up to this.

while($row=mysql_fetch_array($result))
{

}

$row is fetching correct values. How to add it to the <select>

like image 577
Flins Avatar asked Mar 17 '10 06:03

Flins


5 Answers

What about something like this :

echo '<select name="select">';
while($row=mysql_fetch_array($result))
{
    echo '<option value="' . htmlspecialchars($row['column_for_value']) . '">' 
        . htmlspecialchars($row['column_for_label']) 
        . '</option>';
}
echo '</select>';

Of course, up to you to decide which items from $row should be used for the value and the text of each <option>


Just make sure you are escaping the data that comes from your DB -- especially if it can contain HTML ; as you are outputting HTML, this can be done with htmlspecialchars or htmlentities.

Note that those might take a couple of additionnal parameters that I didn't use in my example -- setting those can be useful, depending on the charset you're using.

like image 51
Pascal MARTIN Avatar answered Nov 08 '22 04:11

Pascal MARTIN


All the above answers will work, but are not proper and require extra work. You should not use echo to output to the screen and you don't have to. The below example assumes you are using objects containing data, but you get the idea.

<select name="sales_person">
        <?php foreach ($sales_people as $sales_person){?>
            <option value="<?=$sales_person->first_name?> <?=$sales_person->last_name?>"><?=$sales_person->first_name?> <?=$sales_person->last_name?></option>
        <?php }?>
        </select>

The point being you don't have to echo out the html

like image 40
ed209 Avatar answered Oct 05 '22 23:10

ed209


You can see whats available to use by doing this in the while:

var_dump($result);
exit;

That will print the first result and its array contents. Then you can see what field you want to use to populate the option. From there, you would do something like:

foreach ($result['field'] as $field) {
   print '<option value="'.$field.'">$field</option>';
}

Of course this is a very basic example, and as others have noted you may want to clean the data before putting it into a form.

like image 4
Kevin Avatar answered Nov 08 '22 04:11

Kevin



$selected_value="selected_value";
echo '<select name="select">';
while($row=mysql_fetch_array($result))
{
    if($selected_value==htmlspecialchars($row['column_for_value']))
    $selected=' selected';
    else
    $selected='';
    echo '<option value="'.htmlspecialchars($row['column_for_value']).'"'.$selected.'>'
    .htmlspecialchars($row['column_for_label']).
    '</option>';
}
echo '</select>';

Some addition to Pascal MARTIN code, for auto selection of some predefined value

like image 3
Prazek Avatar answered Nov 08 '22 04:11

Prazek


I editied the last entry to this and it works perfectly. The only hassle I have now is once the user has submitted the form the dropdown goes blank... Does anyone know a simple solution

echo '<select name="course" id="course" >';
                while( $option = mysql_fetch_array($course_results)) {
echo "<option    value=".htmlspecialchars($option['cid']).">".htmlspecialchars($option['cname'])."</option>";
}
echo "</select>";
like image 3
user1749168 Avatar answered Nov 08 '22 02:11

user1749168