0

我有一个名为 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

问题是每当有人在页面上执行获取请求时,POST 数据就会消失。有谁知道我们可以解决这个问题的任何方法。

4

4 回答 4

3

好的,试图排除这里的明显情况。

您正在混合GET并且POST以不正确的方式进行。POST仅当您的表单具有您不希望公开的值并且提交后不再需要这些值(例如登录)时,您才应该解决。在这里,您可以将值继续到下一页等。

这永远不会起作用,因为如果您发布表单,则POST-values 仅在您提交表单后才可用。如果您尝试进行干净刷新(不重新发布表单),您将看到这些值已经消失。

您应该做什么将表单发布为POST然后构建-GET参数查询。

喜欢

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

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

于 2013-05-25T17:03:18.497 回答
0

我不认为 GET 请求会破坏您的 POST 数据。通过添加诸如 print_r($_POST); 之类的调试语句来检查您的 $_POST 数据在“目标”页面加载时是否完整。到您的页面。它应该打印出整个 $_POST 数组以进行检查。

如果您的浏览器支持这样,鼠标右键单击可以让您“检查元素”以更好地格式化视图查看数组。

你可以用 print_r($_GET); 看看它包含什么,或者实际上是任何数组。

于 2013-05-25T16:54:06.260 回答
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 参数的页面。我假设,你不需要两者(即你不关心在发布数据的情况下页码是多少)。

但是,无论如何,您应该能够查看 GET 和 POST 数据。

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

于 2013-05-25T16:51:07.483 回答
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']);
    }
?>
于 2013-05-25T17:05:48.207 回答