Как предотвратить повторение строки запроса URL?

Я использую строку запроса 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: &nbsp;</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: &nbsp;</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: &nbsp;</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 ";

person hugoismyname    schedule 05.05.2012    source источник
comment
вы предотвратите это, правильно создав новый URL.   -  person hakre    schedule 05.05.2012
comment
возможный дубликат сохранения параметров URL во время разбиения на страницы   -  person hakre    schedule 05.05.2012
comment
Спасибо, я проверю пост. Я искал какое-то время, я думаю, я использовал неправильные ключевые слова.   -  person hugoismyname    schedule 05.05.2012


Ответы (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
}
?>
person jeroen    schedule 05.05.2012
comment
Интересно, я попробую и вернусь к вам. Спасибо. - person hugoismyname; 05.05.2012

Измените каждый тег <a>, например: <a href="search.php?'.$query.'&genre=Fighting">Fighting</a> на <a href="search.php?&genre=Fighting">Fighting</a>

То есть удалить '.$query.' часть.

person s.webbandit    schedule 05.05.2012
comment
Не потеряет ли это все остальные параметры? - person hakre; 05.05.2012