使用mySQL下拉搜索查询

问题描述:

我在搜索查询中合并下拉选项时遇到问题。我的下拉菜单工作得很好,但是当我尝试将其更改为下拉菜单时,查询只是拉取了我的所有记录。搜索栏和复选框仍然正常工作。使用mySQL下拉搜索查询

搜索页面:

<?php require_once($_SERVER['DOCUMENT_ROOT']."/includes/session.php");?> 
<?php require($_SERVER['DOCUMENT_ROOT']."/includes/db_connection.php");?> 
<?php require_once($_SERVER['DOCUMENT_ROOT']."/includes/functions.php");?> 

<?php include("../includes/header-home.php"); ?> 
<div class="container"> 
    <div class="col=md-12"> 
    <p><strong>Search:</strong></p> 
    <form name="form1" method="post" action="search_results.php"> 
    <p><input name="search" type="text" size="40" maxlength="50"/></p> 
    <p><strong>Type:</strong></p> 
    <input type="checkbox" name="type[]" value="1"> Medalist</p> 

<select name="medal"> 
<option value="1">Federal Employee of the Year</option> 
<option value="2">Career Achievement Medal</option> 
<option value="3">Call to Service Medal</option> 
<option value="4">Citizen Services Medal</option> 
<option value="5">Homeland Security and Law Enforcement Medal</option> 
<option value="6">Management Excellence Medal</option> 
<option value="7">National Security and International Affairs Medal</option> 
<option value="8">Science and Environment Medal</option> 
</select> 


    <p><input type="submit" name="submit" value="Search" /></p> 
</form> 
    </div></div> 
<?php include($_SERVER['DOCUMENT_ROOT']."/includes/footer.php");?> 

搜索结果页:

<?php require_once($_SERVER['DOCUMENT_ROOT']."/includes/session.php");?> 
<?php require_once($_SERVER['DOCUMENT_ROOT']."/includes/db_connection.php");?> 
<?php require_once($_SERVER['DOCUMENT_ROOT']."/includes/functions.php");?> 

<?php 
if (!isset ($_POST['search'])) { 
    header("Location:admin.php"); 
} 
$search_sqli="SELECT * FROM profiles WHERE 
    (first_name LIKE '%".$_POST ['search']."%' 
    OR last_name LIKE '%".$_POST ['search']."%' 
    OR first_name2 LIKE '%".$_POST ['search']."%' 
    OR last_name2 LIKE '%".$_POST ['search']."%' 
    OR last_name2 LIKE '%".$_POST ['search']."%' 
    OR city LIKE '%".$_POST ['search']."%' 
    OR agency LIKE '%".$_POST ['search']."%' 
    OR subcomponent LIKE '%".$_POST ['search']."%' 
    OR team_name LIKE '%".$_POST ['search']."%' 
    OR achievement LIKE '%".$_POST ['search']."%' 
    OR profile LIKE '%".$_POST ['search']."%')" 
. (isset($_POST['type']) && in_array('1', $_POST['type']) ? " AND medalist='1'" : "") 
. (isset($_POST['FYE']) && in_array('1', $_POST['FYE']) ? " AND medal='1'" : "") 
. (isset($_POST['CAM']) && in_array('2', $_POST['CAM']) ? " AND medal='2'" : "") 
. (isset($_POST['C2S']) && in_array('3', $_POST['C2S']) ? " AND medal='3'" : "") 
. (isset($_POST['CSM']) && in_array('4', $_POST['CSM']) ? " AND medal='4'" : "") 
. (isset($_POST['HSLE']) && in_array('5', $_POST['HSLE']) ? " AND medal='5'" : "") 
. (isset($_POST['MEM']) && in_array('6', $_POST['MEM']) ? " AND medal='6'" : "") 
. (isset($_POST['NSIA']) && in_array('7', $_POST['NSIA']) ? " AND medal='7'" : "") 
. (isset($_POST['SEM']) && in_array('8', $_POST['SEM']) ? " AND medal='8'" : ""); 


$search_query=mysqli_query($connection, $search_sqli); 
if (mysqli_num_rows($search_query) !=0) { 
$search_rs=mysqli_fetch_assoc($search_query); 
} 

?> 

<?php include("../includes/header-home.php"); ?> 
<div class="container"> 
    <div class="col=md-12"> 
    <p>Search:</p> 
    <form name="form1" method="post" action="search_results.php"> 
    <input name="search" type="text" size="40" maxlength="50"/> 
    <input type="submit" name="submit" value="Search" /> 

    </form> 
    <br /> 
    <p><strong>Search Results:</strong></p> 
    <?php if (mysqli_num_rows($search_query) !=0) { 
    do { 
     ?> 
    <p><ul> 
    <li><a href="view_profile.php?profile=<?php echo urlencode($search_rs["id"]); ?>"><?php echo $search_rs['first_name']; ?> <?php echo $search_rs['last_name']; ?> <?php echo $search_rs['first_name2']; ?> <?php echo $search_rs['last_name2']; ?></a></li></ul></p>  

<?php } while ($search_rs=mysqli_fetch_assoc($search_query)); 

    } else { 
     echo "No results found"; 
    } 
    ?> 

    <p> <a class="btn btn-default" href="search.php" role="button">Back to search</a></p> 
    </div></div> 

<?php include($_SERVER['DOCUMENT_ROOT']."/includes/footer.php");?> 
+0

你没有在任何地方使用'$ _POST ['medal']'。你正在检查没有通过你的表单的变量(例如'$ _POST ['FYE']'等) – 2015-02-05 18:54:26

+0

嗯对不起,我已经尝试过,它没有奏效。我会在search_results页面中替换两个,即FYE吗? – surfingpig 2015-02-05 22:27:11

你的选择有medal一个名字,所以你应该在PHP中使用这个。例如:

. (isset($_POST['medal']) && $_POST['medal'] == '1') ? " AND medal='1'" : "") 
. (isset($_POST['medal']) && $_POST['medal'] == '2') ? " AND medal='2'" : "") 
. (isset($_POST['medal']) && $_POST['medal'] == '3') ? " AND medal='3'" : "") 
... etc 

有办法,你可以简化这个,比如:将取代上述所有8条线路

. (isset($_POST['medal']) && (int)$_POST['medal'] > 0) ? " AND medal='".(int)$_POST['medal']."'" : "") 


另要注意,它看起来像你的FYECAM等变量做一个数组(例如:name='FYE[]'),而你的medal变量不是。请确保您注意在PHP中检索这些内容时使用的内容。

+0

当我用奖牌替换所有东西时,我现在得到这个错误:警告:in_array()期望参数2是数组,字符串***中给出的字符串 – surfingpig 2015-02-06 15:16:58

+0

再次查看答案; 'in_array'已被替换为'=='。上面的代码你不应该得到这个警告。 – 2015-02-09 17:35:49