【问题标题】:PHP search results when page is return返回页面时的PHP搜索结果
【发布时间】:2014-01-06 10:10:58
【问题描述】:

我目前在同一页面(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();
        }
    }
}

如您所见,我进行了多次验证。但是想象一下,人们输入另一个网址(我的页面),比如 list.php?id=33 然后他们点击浏览器的后退按钮..浏览器将显示(使用此代码) $load-&gt;common() 而不是 $load-&gt;search() 的结果,因为 $_POST['search-what-box'] 没有被按下(表单没有提交)。

人们点击浏览器的后退按钮后,如何显示搜索结果而不是常见结果?我应该将信息(提交表单后)保存在 javascript 中,然后通过 jQuery 再次加载还是有更好的方法?

谢谢。

【问题讨论】:

  • 如果我错了,请纠正我,即使用户单击“返回”按钮,URL 将保持不变(连同 GET 变量)。
  • @user2513523 你是对的。问题是我只显示在 URL 上:index.php?type=search..我没有把用户搜索的内容放在 URL 上。
  • 明白你的意思,抱歉错过了 POST 条件。
  • 当人们点击返回按钮时,浏览器应该向他们显示 POST 的结果或“确认表单重新提交”对话框,不是吗?

标签: javascript php jquery search


【解决方案1】:

与您的问题无关,但您将$_GET['type']$_POST['search-what-box'] 混合使用。虽然技术上可行,但您应该使用$_GET$_POST

要解决“后退按钮问题”,您可以使用Post/Redirect/Get 成语。

【讨论】:

  • 使用 $_GET 是因为我将页面重定向到同一页面。因此,URL 会随着 PHP_SELF 的变化而变化,这就是我使用 $_GET 的原因。 $_POST 只是为了获取信息。
  • @user3065191 好的,现在我明白了。我第一次看的不够近。
【解决方案2】:

一般而言,您应该设计灵活的网站,以至于根本不需要返回按钮。

但如果你真的想保存你的最后一个搜索结果,你可以将它保存在 $_SESSION 中,例如在服务器端。

【讨论】:

  • 我说的是浏览器的后退按钮,比如 chrome。您可以返回上一页。关于$_SESSION,我认为这是一个很好的可能性..我会尝试一下。
【解决方案3】:

您可以使用 JQuery Ajax 调用 see here

如果在这种情况下单击返回获取和发布数据信息是以前的,ajax 然后使用该信息来呈现页面

【讨论】:

    【解决方案4】:

    第一个问题是浏览器的行为。据我所知,当您按下返回时,浏览器不会重新加载页面 - 它们会向您显示页面本身,因为服务器之前发送它们(带有发布数据)。

    【讨论】:

    • 当我按下返回时,浏览器正在显示常见结果(这是公平的),因为我的代码中有一个条件来验证是否提交了 $_POST ......当你按下返回时不是。
    • 我不确定,只是问:浏览器是否会在您按下后向服务器提出新的请求,或者他们只是向您显示他们自己记忆中的缓存?在这种情况下,您的代码无关紧要,因为浏览器再也不会请求该页面。
    • 他们提出了一个新请求(针对我测试过的内容)。我已经找到了解决方案。我马上贴出来。
    【解决方案5】:

    为什么不将搜索查询作为 URL 的一部分?请改用_GET,这就是 Google.com 所做的。这样我就可以粘贴 URL 并将其提供给某人,它会查看结果。

    【讨论】:

    • 嗯,确实如此。只有 index.php?type=search 人们无法在他们之间传递带有结果的 URL。可能最好的是 index.php?type=search&what=testing ..我认为这比会话更好,因为共享 url。
    • 是的,这是有道理的,而且它对您的服务器的开销要少一些。语义上这也是有道理的,因为您是来自服务器的GETting 信息,使用GET vars
    【解决方案6】:

    好的,伙计们,有了你们所有的答案和帮助我解决了我的问题

    $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();
    }
    

    如果有人认为有更好的方法,请告诉我。

    谢谢

    【讨论】:

      猜你喜欢
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 2021-09-30
      • 2016-12-03
      相关资源
      最近更新 更多