0

我正在编写一个搜索过滤器,它将获取条件列表、查询数据库并返回匹配的用户名数组。这基本上是我正在做的事情:

if (!empty($_GET['cat'])) {
    $category = urldecode($_GET['cat']);
    $category_query = "SELECT DISTINCT username FROM tutor_subjects_taught WHERE category = '{$category}'";
    $category_process = mysql_query($category_query);
    while ($row2 = mysql_fetch_assoc($category_process)) {
        $usernames[] = $row2['username'];
    }
}

这从 URL 中获取设置的类别,并在数据库中查询与此匹配的用户名并将其放入数组中。

现在,我需要做的是使用额外的“过滤器”来缩小这些用户名的范围。我的问题是:如果 $usernames 数组已经设置,我如何创建一个循环查询来检查每个用户名,然后返回一个匹配的子集数组?

例如,假设前面的代码已经设置了 $usernames,因为我们已经设置了一个 $_GET['cat'] 变量。现在我们添加另一个 $_GET 变量“rev”:

if (!empty($_GET['rev']) && isset($usernames)) {
    //Need to create loop here that will take all usernames in array from the previous block of code, check them for rev matching specific number, and return those that match into the $usernames array.
}
4

1 回答 1

1

首先,你不应该使用 mysql。请改用mysqli。这提高了您网站的安全性。这将使黑客更难使用 SQL 注入。

对于过滤,您可以通过在开始时设置所有过滤器来完成所有操作。创建一个$filter变量来保存所有值。

例子:

$filters = array();

if (!empty($_GET['cat'])) {
    $category = urldecode($_GET['cat']);
    $filter[] = 'category = ' . $category;
}

if (!empty($_GET['rev'])) {
    $anotherFilter = urldecode($_GET['rev']);
    $filters[] = 'anotherFilter = ' . $anotherFilter;
}

$filter = implode(' AND ', $filters);
$filter = $mysqli->real_escape_string($filter);

$mysqli = new mysqli('localhost', 'username', 'password', 'database');
$stmt = $mysqli -> prepare("SELECT DISTINCT username FROM tutor_subjects_taught WHERE '$filter'");
$stmt -> execute();
$stmt -> bind_result($username);
/* fetch values */
    while ($stmt->fetch()) {
        printf ("%s\n", $username);
    }
$stmt -> close();
$mysqli -> close();
于 2013-01-09T19:30:29.177 回答