是否可以将“选项值”与第一个数据库记录进行比较?

时间:2012-10-12 07:59:42

标签: php html sql range

抱歉这个含糊不清的长问题。

我正在为包装数据库创建一个搜索表单,在过去的几天里,我在创建一个搜索数据包高度的表单时遇到了一些问题。我希望表单显示与用户输入关联的所有结果,而不是仅返回确切的结果。我无法得到这样的工作。所以我已经开始创建一个在一定范围内搜索的下拉框。

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>

谢谢你们。

1 个答案:

答案 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