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 配列が既に設定されている場合、各ユーザー名をチェックアウトして一致するサブセット配列を返すループクエリを作成するにはどうすればよいですか?

たとえば、$_GET['cat'] 変数が既に設定されているため、前のコードによって $usernames がすでに設定されているとします。次に、別の $_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を使用してください。これにより、Web サイトのセキュリティが向上します。これにより、ハッカーが SQL インジェクションを使用することが難しくなります。

フィルタリングについては、最初にすべてのフィルターを設定することで、すべてを 1 つのクエリで行うことができます。$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 に答える