php $ _POST和分页$ _GET

时间:2010-10-27 13:51:30

标签: php

如果用户尝试通过$ _GET浏览到第二页,如果他们提交了$ _POST数据,我就会遇到问题。

if(!isset($_POST['submit'])) {
//search input box
}
else {
//search details output
//pagination code
}

每当用户按第2页时,它都会显示//search input box

我希望搜索显示第2页而不是//search input box

5 个答案:

答案 0 :(得分:3)

这是因为您没有将POST数据发送到第二页。

每个请求都会设置

$_GET$_POST。如果要保存第一个POST数据,则需要使用会话并将其存储在会话中,或将POSTed数据返回到页面并重新提交。

答案 1 :(得分:2)

正如@Alan所说......第2页没有收到POST数据,所以submit未设置,它认为应该再次显示起始表单。跟踪结果页面的第二个GET变量(例如page)将允许所有三个页面(开始,第1页+提交,第2页)

if (isset($_REQUEST["page"])) {
    //No data received, but reviewing & page-display code should go here
} elseif (isset($_POST["submit"])) {    
    //POST-processing code goes here
    // Page-switching URL should be something like:
    // <a href="results.php?page=2">Page 2</a>  
} else {
    //Nothing posted, not paging - show input
    //search input box
}

不要忘记暂时将POST数据存储在某处,以便在页面上显示数据。

答案 2 :(得分:0)

好像你的逻辑是扭曲的。只需查看您的代码并附加其他评论:

// if POST submit is NOT set
if(!isset($_POST['submit'])) {
   // show search input box
}

答案 3 :(得分:0)

您不应该通过POST提交搜索请求。搜索是一种只读操作,非常适合GET请求和查询字符串。您只需修改查询字符串以包含&page=2之类的内容即可为您的链接添加分页。

答案 4 :(得分:0)

更好的方法是将表单处理拆分为自己的脚本。这使得它更有条理,更符合逻辑,因此您可以更轻松地通过AJAX执行POST操作。解决我看到你遇到的另一个问题的一个提示是,如果你有一个多页表单,你应该存储他们在以前页面上提交的数据。常见的地方是会话数据。还有其他方法可以将其全部存储在javascript数据对象中,直到表单完成。考虑使用框架,他们会帮助。