2

我正在我的网站上开发一个搜索引擎。GET用户可以添加在url 中使用 a 提交的标准。

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

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

他们有 3 个可以选择的标准,所以如您所见,他只选择了 COURSE。

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

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 个标准,这将是一个很长的代码

我该如何解决?

4

2 回答 2

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 注入攻击,您必须清理这些东西。

于 2012-12-12T17:53:03.053 回答
0

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

您的数据库脚本可以通过一次调用完成,其中仅包含选定的条件。

Myqsl 已经折旧,你需要查看 Myqsli 或 PDO

于 2012-12-12T17:54:23.153 回答