我正在使用URL查询字符串来过滤MySQL搜索结果。当用户单击其中一个链接时,查询和另一个变量将传递给应用程序,然后应用程序构建并执行对数据库的SQL查询。
过滤有效 - 用户可以按流派,平台进行过滤,也可以同时排序,但问题是,每次点击链接时,它都会在$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 ";
答案 0 :(得分:2)
使用您的代码,可以使用parse_url
解构查询字符串,并使用http_build_query
为每个链接重建它。
但是,我个人只想找到一个包含3个选择框的表格,其中预先选择了先前选择的值。
您可以将所有选择选项放在一个多维数组中并进行双循环。
示例:
<?php
$options = array(
"genre" => array("Fighting", "Role-Playing", ...),
...
);
foreach $options as $key => $value)
{
?>
<select name="<?php echo $key; ?>">
<?php
foreach ($value as $item)
{
// echo option for item and mark it selected if necessary
}
?>
</select>
<?php
}
?>
答案 1 :(得分:-1)
修改每个<a>
标记,例如:
<a href="search.php?'.$query.'&genre=Fighting">Fighting</a>
至
<a href="search.php?&genre=Fighting">Fighting</a>
即删除'.$query.'
部分。