Liam
Liam

Reputation: 9855

PHP Query based on 'select' values

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

Answers (3)

Mrugen Ramani
Mrugen Ramani

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

Al_
Al_

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

joni_demon
joni_demon

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

Related Questions