如何阻止空SQL查询显示所有结果?

时间:2012-10-09 09:44:38

标签: php html mysql sql

我正在创建一个肉类包装搜索表单,用户可以使用多个表单和下拉框搜索不同的包。我有很多问题,但现在大部分问题已经排序,我只需要为下拉框创建一个“Any”搜索,并显示空文本框显示所有结果的问题。

目前,当用户发送搜索时,他们可能已输入其他一些文本框,但当其中一个表单为空时会自动显示所有结果。我想要它,所以当发送一个搜索并且一个框为空时,代码会忽略该表单,只检查那些内部有信息的表单。

这是我的测试代码(不是我当前的最终表单代码):

<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']);

$sql = "SELECT * FROM delyn WHERE description LIKE '%" . $descrip . "%'";

$r_query = mysql_query($sql);

if ($descrip === "")
{
    echo 'Null value';
}

while ($row = mysql_fetch_array($r_query))
{
    echo '<br /> Description: ' . $row['description'];
}

?>
</body>

任何人对如何制止这个有任何想法?

编辑:对不起,这是我的HTML搜索框。上面的php就是值发送的地方。

<body>
    <form action="form5null.php" method="post">
        <label for="description">Description:</label> <input type="text" name="descrip">
        <br>
        <label for="trayheight">Trayheight:</label> <input type="text" name="height">
        <br>
        <label for="traywidth">Traywidth:</label> <input type="text" name="width">
        <br>
        <label for="traydepth">Traydepth:</label> <input type="text" name="depth">
        <br>
        <label for="trayrange">Trayrange:</label> <select name="trayrange">
            <option value="BBQ">
                BBQ
            </option>

            <option value="Dessert">
                Dessert
            </option>

            <option value="Display">
                Display
            </option>

            <option value="Meat">
                Meat
            </option>

            <option value="Microwave">
                Microwave
            </option>

            <option value="Party">
                Party
            </option>

            <option value="Salad/Wet Pasta">
                Salad/Wet Pasta
            </option>

            <option value="Snacks">
                Snacks
            </option>

            <option value="Standard">
                Standard
            </option>
        </select> <label for="traytype">Traytype:</label> <select name="traytype">
            <option value="Open">
                Open
            </option>

            <option value="Cavitised">
                Cavitised
            </option>

            <option value="Lid">
                Lid
            </option>

            <option value="Tray">
                Tray
            </option>

            <option value="Coallition">
                Coallition
            </option>

            <option value="Bowl">
                Bowl
            </option>

            <option value="Hinge pack">
                Open
            </option>

            <option value="Pot">
                Pot
            </option>

            <option value="Base &amp; Lid">
                Base and Lid
            </option>

            <option value="Rectangular">
                Rectangular
            </option>

            <option value="Specalist">
                Specialist
            </option>
        </select>
        <br>
        <label for="trayshape">Trayshape:</label> <select name="trayshape">
            <option value="Rectangular">
                Rectangular
            </option>

            <option value="Oval">
                Oval
            </option>

            <option value="Square">
                Square
            </option>

            <option value="Insert">
                Insert
            </option>

            <option value="Round">
                Round
            </option>

            <option value="Open">
                Open
            </option>
        </select>
        <br />
        <input type="submit" value="Submit">
    </form>
</body>

2 个答案:

答案 0 :(得分:0)

您是否尝试通过检查值是否为空/空(适用于哪个PHP)来限制SQ​​L查询,如果没有填写任何内容则只运行查询?

e.g。 (伪代码)

if(box1.HasText || box2.HasText || box3.HasText)
{
    RunTheSqlForForm1();
}

答案 1 :(得分:0)

将以下内容添加为所有下拉列表的第一个选项:

<option value="*">All</option> 

然后使用我在重复问题中提供的SQL:

Make SQL ignore a specific search value if clicked in a dropdown?

Dirk Nachbar也给出了一个很好的答案。