删除POST信息的页面上的GET请求


GET request on page removing POST information

我有一个名为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 &gt;" id="Submit" type="submit">
</form>
在我们发布到(test_photo.php)的页面的

上,我们有分页来帮助分解显示的大量数据。这是由GET请求处理的,url可能看起来像http://foobar.com/xpath/test_photo.php?page=0。

问题是每当有人在页面上执行get请求时,POST数据就会消失。有谁知道解决这个问题的方法吗?

好吧,我尽量排除这些明显的因素。

你以一种不正确的方式混合GETPOST。你应该只解决POST,如果你有一个表单的值,你不想暴露,这些值提交后不再需要(如登录)。在这里,你有你带到下一页的值等。

这将永远不起作用,因为如果您发布一个表单,POST值只有在您提交表单之后才可用。如果您尝试进行一次完全刷新(而不是重新发布表单),您将看到这些值都不见了。

你应该做的是将表单作为POST发布,然后构建GET参数的查询。

page.php?page=1&photographer=1&location=3

这是处理过滤器的正确方法。看看谷歌是如何存储当前搜索查询的(google.com?q=你的搜索)。规则是"跨不同页面需要的值"?只有GET。这也将使人们有可能将搜索添加到书签,或者在应用了所有过滤器的情况下将搜索发送给其他人。

我不认为GET请求会破坏您的POST数据。当"目标"页面加载时,通过添加一个调试语句来检查$_POST数据是否完整,例如print_r ($ _POST);转到你的页面。它应该打印出整个$_POST数组来检查。

如果你的浏览器支持,鼠标右键可以让你"检查元素"在一个更好的格式视图中看到数组。

print_r($_GET);来查看它所包含的内容,或者任何数组。

首先,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参数的页面。我假设,您不需要两者(即,您不关心张贴数据的情况下的页码是什么)。

但是,在任何情况下,您都应该能够同时查看GET和POST数据。

现在,当您说"某人在页面上执行get请求"时—如果您的意思是某人在浏览器中粘贴URL并点击Enter,那么在这种情况下您将永远不会看到POST数据。只有在表单提交之后,您才能看到它。

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']);
    }
?>