根据GET参数重写查询

时间:2012-12-12 17:39:50

标签: php get criteria

我正在我的网站上搜索引擎。用户可以添加在网址中使用GET提交的条件。

当用户选择例如1条标准时,它看起来像这样:

localhost/search.php?course=1&price=&name=

他们有3个可以选择的标准,所以你看他只选择了课程。

现在我必须根据标准从数据库中进行选择,因此我的代码如下所示:

if ($_GET['price'] > 0 && $_GET['name'])
{
    $search_price = $_GET['price'];
    $search_name = $_GET['name'];

    $result2 = mysql_query("SELECT id, name, price, views, userid, type, anonymous FROM files WHERE course='$course_id' AND price < $search_price AND name LIKE '%$search_name%'");
}
elseif ($_GET['price'] > 0)
{
    $search_price = $_GET['price'];

    $result2 = mysql_query("SELECT id, name, price, views, userid, type, anonymous FROM files WHERE course='$course_id' AND price < $search_price");
} 
elseif ($_GET['name'])
{
    $search_name = $_GET['name'];

    $result2 = mysql_query("SELECT id, name, price, views, userid, type, anonymous FROM files WHERE course='$course_id' AND name LIKE '%$search_name%'");
}
else 
{
    $result2 = mysql_query("SELECT id, name, price, views, userid, type, anonymous FROM files WHERE course='$course_id'");
}

while ($row2 = mysql_fetch_assoc($result2))
                                        {
.....

但这不是正确的方法,因为如果最终用户可以选择10个标准,这将是一个非常长的代码

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

我要做的是动态创建sql查询,然后在最后执行它。像这样的东西

$query_string = "SELECT blahblah, blahblah, blah blah from blahx where 1=1 ";
$where = "";

if(isset($_GET['somecriteria']))
{
    $where .= " AND blahblah = $_GET['somecriteia'] ";
}
if(isset($_GET['someOTHERcriteria']))
{
    $where .= " AND blahblah=$_GET['someOTHERcritera'] ";
}
mysql_query($query_string . $where);

等。 请注意,这只是为了向您展示如何实现您的目标。这显然容易受到SQL注入攻击,你必须清理它们。

答案 1 :(得分:0)

使用$ _post向php脚本发送大量信息。使用get时,您应该创建url,以便仅在填充时包含get调用。因此,如果没有选择价格,则网址不应包含“price =”。这将导致您的接收脚本出现问题。

您的数据库脚本可以通过一次调用完成,只包括所选标准。

Myqsl已被折旧,您需要查看Myqsli或PDO