抱歉这个含糊不清的长问题。
我正在为包装数据库创建一个搜索表单,在过去的几天里,我在创建一个搜索数据包高度的表单时遇到了一些问题。我希望表单显示与用户输入关联的所有结果,而不是仅返回确切的结果。我无法得到这样的工作。所以我已经开始创建一个在一定范围内搜索的下拉框。
HTML下拉列表:
<body>
<label for="trayheight">Height: </label>
<select name="trayheight">
<option value="">All</option>
<option value="1">100 - 199 range</option>
<option value="2">200 - 299 range</option>
<option value="3">300 - 399 range</option>
</select><br />
</body>
这是下拉范围(我还将添加一个搜索70 - 80个数据包的范围)。正如您所看到的,每个选项值只包含一个数字(“1,2,3”),因此数据库将返回任何结果(例如)中的1。因此,如果用户搜索“100-199”范围内的某些内容,则SQL查询将返回该范围内的所有结果,但当前也返回其中包含“1”的任何内容,例如身高“201”。我想更改它,以便SQL查询将获取该值,然后使用它将其与记录中的第一个数字进行比较,例如1(1)21中的1,因此返回的结果应该只在该范围内,并且不会返回诸如“212”之类的其他内容。是否有某种形式的服务器代码可以解决这个问题?
这是我的服务器端代码:
<body>
<?php
$con = mysql_connect ("localhost", "root", "");
mysql_select_db ("delyn_db", $con);
if (!$con)
{
die ("Could not connect: " . mysql_error());
}
$descrip = mysql_real_escape_string($_POST['descrip']);
$width = mysql_real_escape_string($_POST['width']);
$depth = mysql_real_escape_string($_POST['depth']);
$varHeight= mysql_real_escape_string($_POST['trayheight']);
$varRange = mysql_real_escape_string($_POST['trayrange']);
$varType = mysql_real_escape_string($_POST['traytype']);
$varShape = mysql_real_escape_string($_POST['trayshape']);
$varImage = mysql_real_escape_string($_POST['imagename']);
$sql = "SELECT * FROM delyn WHERE
description LIKE '%".$descrip."%'
AND trayheight LIKE '%".$varHeight."%'
AND trayrange LIKE '%".$varRange."%'
AND traytype LIKE '%".$varType."%'
AND trayshape LIKE '%".$varShape."%'";
$r_query = mysql_query($sql);
while ($row = mysql_fetch_array($r_query))
{
echo '<br /> <img src=" '. $row['imagename'] . '" width="180" length="100">';
echo '<br /> Tool Code: '. $row['toolcode'];
echo '<br /> Description: '. $row['description'];
echo '<br /> Tray range: '. $row['trayrange'];
echo '<br /> Tray type: '. $row['traytype'];
echo '<br /> Tray size: '. $row['traysize'];
echo '<br /> Tray shape: '. $row['trayshape'] . '<br />' . '<br />';
}
if (mysql_num_rows($r_query) <= 0){
echo 'No results match your search, please try again';
}
?>
</body>
谢谢你们。
答案 0 :(得分:0)
只需构建范围:
if (isset($varHeight) && !empty($varHeight)) {
$low = intval($varHeight."00");
$high= intval($varHeight."99");
} else {
$low = intval("000");
$high= intval("999");
}
并更改sql查询以搜索此范围:
AND trayheight LIKE '%".$varHeight."%'
到
"AND trayheight BETWEEN '".$low."' AND '".$high."'"
当然应该进行适当的验证以确保$varHeight
是一个数字(大概在1到9之间)
更新以便找不到$varHeight
过滤器。这假定$varHeight
的所有可能值的总最小值为000
,总最大值为999