PHP用POST数据打开另一个网页

时间:2008-11-22 11:45:12

标签: php post redirect header

我是PHP新手,我正在尝试做一些可能不好的事情并且可能是不可能的。我基本上只是在一起攻击某些东西来测试我的知识,看看PHP能做些什么。

我有一个网页,其中包含收集数据的表单。这是一个PHP脚本,它执行一堆处理 - 但实际上并没有显示任何重要的东西。我想要的是,一旦处理完成,脚本就会告诉浏览器打开另一个页面,显示结果。

我知道我可以使用 header('Location:page.php'); 但我无法弄清楚如何使用它来提供POST数据。我怎样才能做到这一点?或者,是否有另一种方法告诉浏览器打开另一个页面?

编辑:我从回复中得到的是,可能使用各种黑客来做这件事但我最好只将处理和显示代码放在一个文件中。我很高兴;这个实验比什么都重要。

8 个答案:

答案 0 :(得分:17)

您可以将该数据存储在会话中,例如在处理帖子的第一个文件中

session_start();
$_SESSION['formdata'] = $_POST; //or whatever

然后你可以在下一页上阅读,如

session_start();
print_r($_SESSION['formdata']);

或者你可以通过GET传递它:(但根据评论,这是一个坏主意)

header('Location: page.php?' . http_build_query($_POST)); 

如果这样做,请确保在page.php上执行其他处理/验证,因为恶意用户可能会更改变量。您也可能不需要将整个帖子传送到下一页

修改

我应该明确指出,我认为第二种选择可能更糟糕,因为您可以通过get发送的数据大小受到限制,并且可能不太安全,因为用户可以更明显地操纵数据。

答案 1 :(得分:6)

处理完成后是否真的需要调用另一个页面?我可能会做以下事情:

<form method="post" action="display.php">
...
</form>

Display.php的:

if ($_POST) {
    require_once(process.php);
    process($_POST);
    display_results;
}

使用process.php包含处理发布请求所需的代码。

或者,您可以使用类似cURL库的内容将处理结果传递给您自己指定的页面。不知道那是不是你真正想要的。

答案 2 :(得分:3)

你可以使用JavaScript作为一种肮脏的解决方法:

<form id="redirect_form" method="post" action="http://someserver.com/somepage.php">
    <input type="hidden" name="field_1" value="<?php echo htmlentities($value_1); ?>">
    <input type="hidden" name="field_2" value="<?php echo htmlentities($value_2); ?>">
    <input type="hidden" name="field_3" value="<?php echo htmlentities($value_3); ?>">
</form>
<script type="text/javascript">
    document.getElementById('redirect_form').submit();
</script>

(脚本应该在表格下面)

答案 3 :(得分:0)

无法将用户的浏览器重定向到仲裁页面并发送POST请求。这会有一点安全风险,任何链接都可能导致您将任何表单提交到任意站点而不会对将要发生的事情有任何线索。

简而言之,这是不可能的

答案 4 :(得分:0)

AFAIK这通常分两个步骤完成:

  1. 在form.php上,将数据发布到脚本process.php
  2. process.php脚本处理数据但从不输出任何内容,它总是调用header(“Location:asdasd”)重定向到success.php或failure.php页面(如果适用)

答案 5 :(得分:0)

在一个脚本中完成所有操作,只为结果输出不同的HTML。

<?php  if($doingForm)  {   ?>

html for form here

<?php } else { ?>

html for results

<? } ?>

答案 6 :(得分:0)

这个问题困扰了我一段时间。我的自定义CMS执行一些相当复杂的处理,上传和操作,因此有时输出相当冗长的错误和信息消息,这些消息不适合转换为GET数据,我一直想避免数据INSERT上的重载问题,但是尚未找到适当的解决方案。

我认为正确的方法是为每个可能的状态创建消息数组 - 您可能想要显示的每条消息或错误,然后您只需要发送更容易的错误/消息编号处理比长数据字符串,但它是我一直回避的东西,因为我发现它有点乏味和繁琐。坦率地说,这可能只是我的懒惰。

我非常喜欢SESSION变量存储解决方案,但这引发了一个问题,即如何确保SESSION数据被正确销毁? 只要您确保只发送信息(消息/错误)而不是应该/可以存储的数据(因此可能存在敏感信息),这应该是一个可以避免的问题。

答案 7 :(得分:-3)

我希望我的问题得到了解决。 你可以试试这个:

  1. 将表单调整为如下所示:
  2. form method =“POST”action =“process_data.php”

    2。 然后创建文件process_data.php,令人惊讶地处理数据 在此文件中,您使用标题:
    例如:

    $ head = sprintf(“page.php?data1 =%d?data2 =%d”,$ data1,$ data2);
    报头($头);

    我希望我能提供帮助。