I have a dropdown menu populated from a table in a MySQL database. It functions, but I would like to add an if/else statement to the code to change the default value of the dropdown according to the conditions. Here is the code for the dropdown (much thanks to AlienWebguy for his assistance in getting this far):
<?php
$sql="SELECT techID, tech_userlogin FROM technicians";
$result=mysql_query($sql);
while ($row=mysql_fetch_array($result))
{
$techID = $row['techID'];
$tech_userlogin=$row['tech_userlogin'];
// Here - check if the $_GET value in the query matches the tech_userlogin
($selected = ($tech_userlogin == $_GET['wtech_userlogin']) ? 'selected="selected"' : '');
echo '<option value="' . $tech_userlogin . '" ' . $selected . '>' . $tech_userlogin . '</option>' . "
";
}
?>
I've tried a couple of things to accomplish what I'm after, but I'm severely hampered by my lack of experience and/or expertise in PHP/MySQL.
This is the first time I've tried these things and it has been hit and miss so far. I've recieved help here at Stack Overflow and I'm grateful such a resource exists.
This is my latest effort and it fails to achieve what I'm after. I want the default value of the dropdown to be "--Select Technician--" if the condition is not met in the if statement.
<?php
$sql="SELECT techID, tech_userlogin FROM technicians";
$result=mysql_query($sql);
$options="";
while ($row=mysql_fetch_array($result))
{
$techID = $row['techID'];
$tech=$row['tech_userlogin'];
$options.="<option value=\"$tech\">$tech</option>";
// Here - check if the $_GET value in the query matches the tech_userlogin
if
($selected = ($tech == $_GET['wtech_userlogin']) ? 'selected="selected"' : '')
{echo '<option value="' . $tech . '" ' . $selected . '>' . $tech . '</option>' . "
";}
else
{echo '<option value="' . $options . '" . 'selected="selected"'>'--Select Tech--'<. $options .>' . "
";}
}
?>
Can someone please help me or point me in the right direction? Many thanks.
Cheers
Try this
<select name="whatever">
<option value="">-- Select Technician --</option>
<?php while ($row = mysql_fetch_array($result)) :
$techId = $row['techID']; // why isn't this used?
$tech = htmlspecialchars($row['tech_userlogin']);
$selected = $row['tech_userlogin'] == $_GET['wtech_userlogin'] ? '" selected="selected' : '';
?>
<option value="<?php echo $tech, $selected ?>"><?php echo $tech ?></option>
<?php endwhile ?>
</select>
You wrote this, which isn't doing what you want:
($selected = ($tech == $_GET['wtech_userlogin']) ? 'selected="selected"' : '')
Change to this:
($selected = ($tech == $_GET['wtech_userlogin']) ? 'selected="selected"' : false)
Notice the 'false'. You need that because empty quotes is not false, it is considered 'true' by PHP.
I could be wrong, but I believe the problem is with your if statement. You have:
($selected = ($tech == $_GET['wtech_userlogin']) ? 'selected="selected"' : '')
The problem is that you are assigning the result of the ternary statement to the variable $selected, which will always return a true for a successful assignment.
If the whole if/then is just there to create a default, you're making it way too complicated.
$options = '<option value="">--Select Tech--</option>';
while ($row=mysql_fetch_array($result))
{
$techID = $row['techID'];
$tech = $row['tech_userlogin'];
$selected = ($tech == $_GET['wtech_userlogin']) ? 'selected="selected"' : '';
$options .= '<option value="' . $techID . '" ' . $selected . '>' . $tech . '</option>' . "
";
}
Now $options
has all of your options in it, including a default option (--Select Tech--, with empty value) that shows up first, and will therefore start out selected if nothing else has the selected
attribute.
Note that you also had $tech
in the value of your option, but I assumed you meant to say $techID
.