Результаты поиска PHP при возврате страницы

0

В настоящее время я показываю результаты поиска на одной странице (index.php), в параметрах URL я просто ставил index.php? Type = search

<form method='POST' action='" . $_SERVER['PHP_SELF'] . "?type=search'>

Таким образом, в index.php я проверяю, будет ли он искать или нет:

if(!isset($_GET['type'])) {
    echo $load->common();
}else{
    if($_GET['type'] == 'search'){
        if(isset($_POST['search-what-box'])){
            echo $load->search($_POST['search-what-box'], $_POST['search-where-box'], null);
        }else{
            echo $load->common();
        }
    }
}

Как вы видите, я делаю несколько проверок. Но представьте, что люди входят в другой url (моей страницы), например list.php? Id = 33, а затем они нажимают кнопку "Назад" браузера. В браузере отобразится (с этим кодом) результаты $load->common() а не $load->search(), потому что $_POST['search-what-box'] не был нажат (форма не была отправлена).

Как я могу показать результаты поиска вместо обычных результатов после того, как люди нажмут кнопку "Назад" браузера? Должен ли я сохранять информацию (после отправки формы) в javascript, а затем загружать ее снова jQuery или есть лучший подход?

Благодарю.

  • 0
    Поправьте меня, если я ошибаюсь, даже если пользователь нажимает кнопку «Назад», URL останется прежним (вместе с переменной GET).
  • 0
    @user2513523 user2513523 ты прав. Проблема в том, что в URL-адресе я только отображаю: index.php? Type = search .. Я не помещаю то, что пользователь искал в URL.
Показать ещё 2 комментария
Теги:
search

6 ответов

2

Не связанный с вашим вопросом, но вы смешиваете $_GET['type'] и $_POST['search-what-box']. Хотя технически это возможно, вы должны использовать либо $_GET либо $_POST.

Чтобы решить проблему "Back button", вы можете использовать идиому Post/Redirect/Get.

  • 0
    $ _GET используется, потому что я перенаправляю страницу на ту же страницу. Итак, URL меняется с PHP_SELF, поэтому я использую $ _GET. $ _POST просто для получения информации.
  • 0
    @ user3065191 Хорошо, теперь я понял. Я не выглядел достаточно близко в первый раз.
1

В общем, вы должны разработать свой веб-сайт, который будет гибким, если кнопка "Назад" не является обязательной.

Но если вы действительно хотите сохранить свой последний результат поиска, вы можете сохранить его в $ _SESSION, например, на стороне сервера.

  • 0
    Я говорю о кнопке браузеров, как хром. Вы можете вернуться на предыдущую страницу. Что касается $ _SESSION, я думаю, что это хорошая возможность ... и я собираюсь попробовать.
0

вы можете использовать вызов JQuery Ajax, см. здесь

если щелкнуть обратно данные "Получить и отправить данные" являются предыдущими в этом случае, ajax затем использует эту информацию для отображения страницы

0

Хорошо, ребята, со всеми вашими ответами и помощью, я решил свою проблему.

$url = "http://". $_SERVER['HTTP_HOST'] . urldecode($_SERVER['REQUEST_URI']);
// urldecode = some special characters might be in the query

$parse = parse_url($url);
// documentation: http://pt1.php.net/parse_url

if(isset($parse['query'])){
    $split = $parse['query'];
    parse_str($split);

    // documentation: http://pt2.php.net/manual/en/function.parse-str.php

    if(isset($what)){
        echo $load->search($what, $where);
    }else{
        echo $load->common();
    }
}else{
    echo $load->common();
}

Если кто-нибудь подумает, что есть лучший подход, дайте мне знать.

благодаря

0

Почему бы вам не сделать поисковый запрос частью URL? Вместо этого используйте _GET, это то, что делает Google.com. Таким образом, я мог бы вставить URL-адрес и передать его кому-то, и он просмотрит результаты.

  • 0
    Ну, это на самом деле правда. Имея только index.php? Type = search, люди не могли бы передавать между ними URL с результатами. Вероятно, лучшим будет index.php? Type = search & what = testing .. Я думаю, что это лучше, чем сессии только из-за совместного использования URL.
  • 0
    Да, это имеет смысл, и это немного меньше накладных расходов для вашего сервера. Symantically также имеет смысл , так как вы GET информацию Ting с вашего сервера, чтобы использовать GET ВАР
0

Первый вопрос - это поведение браузеров. Насколько я вижу, браузеры не загружают страницу заново, когда вы нажимаете назад - они показывают вам страницу как сервер, отправленный им раньше (с данными сообщения).

  • 0
    Браузер, когда я нажимаю «назад», отображает общие результаты (что справедливо), потому что в моем коде есть условие, проверяющее, была ли отправлена $ _POST… чего не было при нажатии назад.
  • 0
    Я не уверен, просто спрашиваю: надоедают ли браузеры вообще делать новый запрос на сервер, когда вы нажимаете назад, или они показывают вам только кэшированный из их собственной памяти? В этом случае ваш код не имеет значения, потому что браузер никогда не запрашивает страницу снова.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню