2012-03-21 123 views
0

我有一个包含多个值的多个下拉列表。PHP根据“选择”值进行查询

我想运行一个基于什么下拉已被选中的查询,所以如果只有1已被填写,运行第一个查询,如果2选项已被填写,运行第二等等,所以向前。我敢肯定有一个更好的方式来做到这一点只有我不跟HTML,任何帮助非常感谢太精通...

<!-- 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得到了这方面的工作......

<?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); 

     } 


    ?> 
只有

拉着我的结果它拉真的零星......当

回答

1

我想你应该从该选项的值删除#对于未选择的选项,即:

<option value="">Choose Your Fuel Type</option> 

那么当你测试:

$_POST['OPT1'] != '' 

应该正常工作。

如果你想检查是否两个选项1和2的值可以使用:

if ($_POST['OPT1'] != '' && $_POST['OPT2'] != '') { 
    // run query 
} 

编辑: 只是重读最后一点,你可以尝试这样的事情,看看有多少值已总共输入(不是特定的哪一个),你可以只有一个名为$ counter的变量,并分别运行每个if语句(不使用elseif),并在每个if语句中添加一个到计数器$counter++;最后可以看到运行if看看计数器的值是0,1,2还是3.

0

我觉得你需要这样这样的方法

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); 
0

您可以使用switch语句。

<?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; 
} 
?>