Reputation: 9855
I have a form with multiple dropdowns consisting of multiple values.
I'm trying to run a query based on what dropdown has been selected, so if only 1 has been filled out, run the first query, if 2 options have been filled out, run the second and so on and so forth. I'm sure there's a better way to do this only i'm not too proficient with HTML, any helps greatly appreciated...
<!-- Search query -->
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="hidden" name="search" value="complete">
<select name="OPT1">
<option value="#">Choose Your Fuel Type</option>
<option value="petrol">Petrol</option>
<option value="diesel">Diesel</option>
<option value="lpg">LPG</option>
</select>
<select name="OPT2">
<option value="#">Choose Your Fuel Type</option>
<option value="petrol">Petrol</option>
<option value="diesel">Diesel</option>
<option value="lpg">LPG</option>
</select>
<select name="OPT3">
<option value="#">Choose Your Fuel Type</option>
<option value="petrol">Petrol</option>
<option value="diesel">Diesel</option>
<option value="lpg">LPG</option>
</select>
<input type="submit" />
</form>
<?php
if ($_POST['OPT1'] != '') {
echo 'option 1';
$pageposts = $wpdb->get_results("SELECT wposts.* FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_value = '".$_POST['OPT1']."' ORDER BY wpostmeta.meta_value DESC", OBJECT);
} else if ($_POST['OPT2'] != '') {
echo 'option 2';
$pageposts = $wpdb->get_results("SELECT wposts.* FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_value = '".$_POST['OPT1']."' OR wpostmeta.meta_value = '".$_POST['OPT2']."' ORDER BY wpostmeta.meta_value DESC", OBJECT);
}
else if ($_POST['OPT3'] != '') {
echo 'option 3';
$pageposts = $wpdb->get_results("SELECT wposts.* FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_value = '".$_POST['OPT1']."' OR wpostmeta.meta_value = '".$_POST['OPT2']."' OR wpostmeta.meta_value = '".$_POST['OPT3']."' ORDER BY wpostmeta.meta_value DESC", OBJECT);
}
?>
Ive got this working...
<?php
if ($_POST['OPT2'] == '' && $_POST['OPT3'] == '') {
echo 'option 1';
$pageposts = $wpdb->get_results("SELECT wposts.* FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_value = '".$_POST['OPT1']."' ORDER BY wpostmeta.meta_value DESC", OBJECT);
} else if ($_POST['OPT1'] != '' && $_POST['OPT2'] != '' && $_POST['OPT3'] == '') {
echo 'option 2';
$pageposts = $wpdb->get_results("SELECT wposts.* FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_value = '".$_POST['OPT1']."' OR wpostmeta.meta_value = '".$_POST['OPT2']."' ORDER BY wpostmeta.meta_value DESC", OBJECT);
}
else if ($_POST['OPT1'] != '' && $_POST['OPT2'] != '' && $_POST['OPT3'] != '') {
echo 'option 3';
$pageposts = $wpdb->get_results("SELECT wposts.* FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_value = '".$_POST['OPT1']."' OR wpostmeta.meta_value = '".$_POST['OPT2']."' OR wpostmeta.meta_value = '".$_POST['OPT3']."' ORDER BY wpostmeta.meta_value DESC", OBJECT);
}
?>
only when pulling my results it pulls really sporadically...
Upvotes: 0
Views: 1071
Reputation: 64
You can use switch statement.
<?php
if ($i == 0) {
echo "i equals 0";
} elseif ($i == 1) {
echo "i equals 1";
} elseif ($i == 2) {
echo "i equals 2";
}
switch ($i) {
case 0:
echo "i equals 0";
break;
case 1:
echo "i equals 1";
break;
case 2:
echo "i equals 2";
break;
}
?>
Upvotes: 0
Reputation: 2509
I think you should remove the # from the option value for the options that are not selected, ie:
<option value="">Choose Your Fuel Type</option>
then when you test:
$_POST['OPT1'] != ''
It should work properly.
If you are trying to check if both option 1 and 2 have values you would use:
if ($_POST['OPT1'] != '' && $_POST['OPT2'] != '') {
// run query
}
edit:
just reread the last bit you could try something like this to see how many values have been entered in total (not specifically which ones) you could just have a variable called $counter and run each if statement separately (not using elseif) and in each if statement add one to the counter $counter++;
at the end you could then see run an if satement to see ifthe value of counter is 0,1,2 or 3.
Upvotes: 1
Reputation: 666
I think you need something like this
if ($_POST['OPT1'] != '') {
$where .= "AND wpostmeta.meta_value = '".$_POST['OPT1']."'";
}
if ($_POST['OPT2'] != '') {
$where .= "wpostmeta.meta_value = '".$_POST['OPT2']."'";
}
if ($_POST['OPT3'] != '') {
$where .= "wpostmeta.meta_value = '".$_POST['OPT3']."'";
}
$pageposts = $wpdb->get_results("SELECT wposts.* FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.ID = wpostmeta.post_id ".$where."' ORDER BY wpostmeta.meta_value DESC", OBJECT);
Upvotes: 0