使用多个术语搜索mysql数据库,使用某些下拉菜单


Search mysql database using multiple terms utilizing drop menu for some

我有多字段数据库,有些变量是常量的,它们是使用下拉菜单选择的,有些变量是自由输入的。我想搜索数据库并查找包含所选术语组合的行数,它在大多数情况下都有效,但是如果我使用超过 2 个下拉菜单进行选择,它似乎停止工作: 表单搜索:

<form  action="search2.php" method="post">
<p>
Name: <input type="text" name="term1" style="background-color:#FFFF11">
<br />
<br />
Dept.: &nbsp;<input type="text" name="term4" style="background-color:#FFFF11">
<br />
<br />
Month: <select name="term2" style="width:65px;  color: black;background-color:#FFFF11">
<option value="" style="background-color: #FFFF11;">...</option>
<option value="Jan" style="background-color: #FFFF11;" >Jan</option>
<option value="Feb" style="background-color: #FFFF11;">Feb</option>
<option value="Mar" style="background-color: #FFFF11;">Mar</option>
<option value="Apr" style="background-color: #FFFF11;" >Apr</option>
<option value="May" style="background-color: #FFFF11;">May</option>
<option value="Jun" style="background-color: #FFFF11;">Jun</option>
<option value="Jul" style="background-color: #FFFF11;" >Jul</option>
<option value="Aug" style="background-color: #FFFF11;">Aug</option>
<option value="Sep" style="background-color: #FFFF11;">Sep</option>
<option value="Oct" style="background-color: #FFFF11;" >Oct</option>
<option value="Nov" style="background-color: #FFFF11;">Nov</option>
<option value="Dec" style="background-color: #FFFF11;">Dec</option>
</select>
<br />
<br />
Year: &nbsp;&nbsp;<select name="term3" style="width:65px;  color: black;background-color:#FFFF11">
<option value="" style="background-color: #FFFF11;">...</option>
<option value="2010" style="background-color: #FFFF11;" >2010</option>
<option value="2011" style="background-color: #FFFF11;">2011</option>
<option value="2012" style="background-color: #FFFF11;">2012</option>
</select>
<br />
<br />
</p>
&nbsp;&nbsp;<input class="button" type="submit" name="submit" value="Submit">
</form>

搜索代码:

<?php
include "db.inc.php";
$term1 = $_POST['term1'];
$term2 = $_POST['term2'];
$term3 = $_POST['term3'];
$term4 = $_POST['term4'];
$sql ="SELECT * FROM fixes WHERE tech  LIKE '%$term1%' AND date LIKE '%$term2%' AND date LIKE '%$term3%' AND dept LIKE '%$term4%'";

$rs_result = mysql_query ($sql);
$num_rows = mysql_num_rows($rs_result);
$query = mysql_query("SELECT * FROM fixes WHERE tech  LIKE '%$term1%' AND date LIKE '%$term2%' AND date LIKE '%$term3%' AND dept LIKE '%$term4%'"); 
$number=mysql_num_rows($query); 
?>

如果我决定对部门使用下拉菜单,使用上面的相同格式它会停止工作,也许有更好的方法? 谢谢

一般来说,下拉菜单的数量应该不会影响您的表单或相应的 SQL 查询。

当您尝试将文本字段转换为上述代码中的下拉列表时,需要考虑的一件事是,您记得保持名称唯一(即,如果您从另一个术语复制了<select...>...</select>代码,请确保将新 SELECT 的名称更改为"term4"或任何它应该是什么。

另一件需要考虑的事情是,如果你改为下拉列表,这意味着你的输入值是有限的和可知的,你应该改变你的SQL使用...WHERE dept = '$term4'...而不是LIKE;这应该使查询更快,因为当你知道所有可能的选项时,你不需要通配符或部分匹配。

正如我上面评论的那样,当您在查询中使用变量时,不要忘记转义它们以避免 SQL 注入。

你的HTML工作,你的SQL是有效的。你提到当两个以上的<select>列表时,你的代码不起作用,但你的代码中只有两个。第三个可能与前两个之一的名称冲突(如果您复制/粘贴等)