URL検索文字列を使用してMySQL検索結果をフィルタリングしています。ユーザーがリンクの1つをクリックすると、別の変数とともにクエリがアプリケーションに渡され、アプリケーションがデータベースにSQLクエリを作成して実行します。URLクエリ文字列の繰り返しを停止する方法はありますか?
フィルタリングは機能します。ユーザーはジャンル、プラットフォーム別にフィルタリングでき、同時にソートすることもできますが、リンクをクリックするたびに$query
の末尾に別の変数が追加されるという問題があります。例えば
例でユーザータイプであれば、フィルター、ジャンルアクションとして選択し、クエリは次のようになります。
keywords=example&genre=action
しかし、彼らはその後、冒険のジャンルをクリックして言うことができます、クエリは次のようになります。
keywords=example&genre=action&genre=adventure
変数がすでに設定されている場合、そのクエリを取得する方法はありますか?
$query = mysql_real_escape_string(htmlentities(trim($_SERVER[QUERY_STRING])));
<div id="filter_nav">
<ul id="nav_form">
<li><h3 id="h3">Genre: </h3>
<li><a href="search.php?'.$query.'&genre=Fighting">Fighting</a></li>
<li><a href="search.php?'.$query.'&genre=Role-Playing">Role-Playing</a></li>
<li><a href="search.php?'.$query.'&genre=Action">Action</a></li>
</ul>
<ul id="nav_form">
<li><h3 id="h3">Platform: </h3>
<li><a href="search.php?'.$query.'&platform=Playstation 3">PS3</a></li>
<li><a href="search.php?'.$query.'&platform=xbox 360">Xbox 360</a></li>
<li><a href="search.php?'.$query.'&platform=Gamecube">Gamecube</a></li>
</ul>
</div>
';
echo '
<ul id="sorting_form">
<li><h3 id="h3">SORT BY: </h3>
<li><a href="search.php?'.$query.'&order=title">Title</a></li>
<li><a href="search.php?'.$query.'&order=release_date">Date</a></li>
<li><a href="search.php?'.$query.'&order=rating">Rating</a></li>
</ul>
';
function search_results($keywords){
$returned_results = array();
$where = "";
$keywords = preg_split('/[\s]+/', $keywords);
$total_keywords = count($keywords);
foreach($keywords as $key=>$keyword){
$where .= "title LIKE '%$keyword%'";
if($key != ($total_keywords - 1)){
$where .= " AND ";
}
}
if (isset($_GET['platform']) && !empty($_GET['platform'])){
$platform = mysql_real_escape_string(htmlentities(trim($_GET['platform'])));
$where .= " AND platform='$platform'";
}
if (isset($_GET['genre']) && !empty($_GET['genre'])){
$genre = mysql_real_escape_string(htmlentities(trim($_GET['genre'])));
$where .= " AND genre='$genre'";
}
if (isset($_GET['order']) && !empty($_GET['order'])){
$order = mysql_real_escape_string(htmlentities(trim($_GET['order'])));
$where .= " ORDER BY $order DESC";
}
$results ="SELECT * FROM games WHERE $where ";
あなたは(http://stackoverflow.com/a/9667076/367456)[が正常に新しいURLをbuildiong]であることを防ぎます。 – hakre
[ページング時にURLパラメータを保持する]の複製が可能です。(http://stackoverflow.com/questions/9666909/keeping-url-parameters-during-pagination) – hakre
ありがとう、私は投稿をチェックアウトします。私はしばらく私は間違ったキーワードを使用していたと推測してきた。 – hugoismyname