我有一个名为test_photo.php的页面,人们在发出POST请求后会从表单定向到
<form id="search_photos" action="test_photo.php" method="post">
<select name="photographer" id="photographer">
<option selected="selected" value="x">Any Photographer</option>
</select>
<--Removed for clarity sake -->
<input name="Submit" value="Search Now >" id="Submit" type="submit">
</form>
在我们发布到(test_photo.php)的页面上,我们有分页来帮助分解显示的大量数据。这是由GET请求处理的,网址可能类似于http://foobar.com/xpath/test_photo.php?page=0。
问题在于,只要有人在页面上执行get请求,POST数据就会消失。有谁知道我们能解决这个问题的方法。
答案 0 :(得分:3)
您正在以不正确的方式混合GET
和POST
。如果您的表单包含您不希望公开的值,并且在提交后不再需要这些值(例如登录),则只应解决POST
。在这里,您可以将值继续到下一页等。
这将永远不会有效,因为如果您发布表单,则POST
- 值仅在您提交表单后才可用。如果您尝试进行干净的刷新(不重新发布表单),您将看到值已消失。
您应该将表单发布为POST
,然后构建GET
- 参数的查询。
像
page.php?page=1&photographer=1&location=3
这是解决过滤器问题的正确方法。只需看看Google如何存储当前的搜索查询(google.com?q=your search)。规则是“不同页面需要的值”?只需GET
。这也可以让人们为搜索添加书签或将其发送给应用了所有过滤器的其他人。
答案 1 :(得分:0)
首先,POST数据不会消失。它存在,但是如果它首先看到GET数据,你的提交处理程序可能会忽略它。
正如这个小小的演示将显示:
<?
print_r( $_REQUEST );
?>
<form action="/path/to_this/page.php?get=yes" method="post">
<input type="text" name="test" value="SomeVal"/>
<input type="submit">
</form>
但是,那说,听起来你最简单的选择就是在没有GET参数的情况下将数据提交给页面。我假设,你不需要两者(即你不关心POST数据的页码是多少)。
但是,无论如何,你应该能够同时查看GET和POST数据。
现在,当你说“有人在页面上执行获取请求”时 - 如果你的意思是,有人在浏览器中粘贴了URL并按Enter键,那么在这种情况下你永远不会看到POST数据。只有在提交表单后才会看到它。
答案 2 :(得分:0)
我认为GET请求不会破坏您的POST数据。通过添加诸如的调试语句,在“目标”页面加载时检查$ _POST数据是否完好无损 的print_r($ _ POST); 到你的页面。它应该打印出要检查的整个$ _POST数组。
如果您的浏览器支持此类操作,只需单击鼠标右键,即可“检查元素”,以更好的格式化视图查看数组。
你可以用print_r($ _ GET)做同样的事情;看看它包含的内容,或者事实上的任何数组。
答案 3 :(得分:0)
GET值不会破坏POST值,你必须更好地理解这一点,就是这样。
使用POST提交表单时,加载的页面会生成一个带有值的$ _POST数组。当您加载包含GET参数的其他页面时,POST会消失,因为它在页面加载时不会持久。
您需要做的是存储值(例如,使用会话)以使其持久化。类似的东西:
<?php
session_name("any_name_for_starting_a_session");
session_start();
if (isset($_POST)) $_SESSION['passed_values'] = $_POST; // Store the values if POST is sent
if (isset($_SESSION['passed_values'])) { // Getting the values if stored
$post = $_SESSION['passed_values'];
// Here you can work with $post ...
//...
// If you need to delete the stored values
// unset($_SESSION['passed_values']);
}
?>