【问题标题】:PHP search script confusionPHP 搜索脚本混淆
【发布时间】:2014-07-22 17:11:09
【问题描述】:

在构建 PHP 应用程序时,我已经到了应该处理搜索引擎脚本的地步,但是我对如何做的问题很少。

我看过很多关于这个问题的指南和教程,但没有一个解释要采用哪种方法。

所以选项是:

带有 post 方法的表单,该方法将发布的关键字提供给执行查询的函数

<?php
$keywords = preg_split('/[\s]+/', $_POST['keywords']);
$products->search($keywords);
?>
<form action="" method="post">
    <input type="text" name="keywords">
    <input type="submit" value="submit">
</form>

带有 get 方法的表单会像 ?keywords=x+y+z 这样改变 http 地址,在这种情况下,关键字是从 $_GET 传递的

<?php
$keywords = preg_split('/[\s]+/', $_GET['keywords']);
$products->search($keywords);
?>
<form action="" method="get">
    <input type="text" name="keywords">
    <input type="submit" value="submit">
</form>

带有 post 方法的表单在提交时会重定向到同一页面,但带有 ?keywords=x+y+z 插件

<?php
header('Location: file.php?keywords=' . $_POST['keywords']);
exit();
?>
<form action="" method="post">
    <input type="text" name="keywords">
    <input type="submit" value="submit">
</form>
<?php
$keywords = preg_split('/[\s]+/', $_GET['keywords']);
$products->search($keywords);
?>

从我学到的知识来看,如果你想实现分页,纯 post 方法非常糟糕。当通过 $_GET ?page=2 切换页面时,帖子不再保留并且搜索结果消失了,我认为我也必须通过帖子切换页面,所以我很困惑我应该采用哪种方法,谢谢您的所有提示: )

【问题讨论】:

    标签: php


    【解决方案1】:

    如果您进行搜索,正确的方法是GETsee the description of the various request methods from w3。在此基础上,GETPOST 更合适。

    话虽如此,您正在检索某种资源,并且您可能会争辩说该页面是其中的一部分,因此您似乎建议您可以这样做

    /search?keywords=HAL&page=2
    

    或者这个基于 uri 的版本,其中页面是资源定义的一部分:

    /search/2/?keywords=HAL
    

    甚至全力以赴

    /search/keyword1/keyword2/2
    

    (我本身不是最后一个的粉丝,我喜欢中间或第一个;这一切都与您定义为您要获取的资源以及参数是什么有关。我'确信网络上充满了讨论,在这里发布会相当冗长)

    意识到您不是在谈论 $_GET$_POST。这些是 PHP 实现。您应该决定您将接受哪个METHOD 作为请求,然后您可以查看这些全局变量以找出信息所在的位置。

    我的建议是

    【讨论】:

    • 我明白了,我需要进行相当长的研究,但我明白你的意思,你有没有机会至少解释一下如何完成/search/2/?keywords=HAL 我看到了那些斜线,我好奇怎么做;)
    • 这些只不过是 url 栏中的普通斜杠:它们不必等于特定文件。标准方法是编写某种“路由器”来处理所有流量(例如,通过.htaccess 将全部发送到application.php。该文件从请求中读取用户所要求的内容(例如,在/ 上拆分)。然后调用search.php文件,表示找到第2页,并附上关键词。google了一下php中的router,还有mvc->很多例子!
    猜你喜欢
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多