10

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

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

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

编辑:我从回复中得到的是,可以使用各种黑客来做到这一点,但我最好将处理和显示代码放在一个文件中。我对此很满意;这比什么都重要。

4

8 回答 8

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 发送的数据大小的限制,并且它可能不太安全,因为用户可以更明显地操纵数据。

于 2008-11-22T12:16:12.737 回答
7

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

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

显示.php:

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

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

或者,您可以使用 cURL 库之类的东西将处理结果传递给您自己指定的页面。不知道这是否真的是你所追求的。

于 2008-11-24T07:58:34.283 回答
4

您可以使用 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>

(脚本应在表格下方)

于 2008-11-22T13:38:11.883 回答
0

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

简而言之,这是不可能的

于 2008-11-22T12:24:23.983 回答
0

AFAIK 这通常分两步完成:

  1. 在 form.php 上,将数据发布到脚本 process.php
  2. process.php 脚本处理数据但从不输出任何内容,它总是调用 header("Location: asdasd") 重定向到 success.php 或 failure.php 页面(如果适用)
于 2008-11-22T12:58:56.037 回答
0

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

<?php  if($doingForm)  {   ?>

html for form here

<?php } else { ?>

html for results

<? } ?>
于 2008-11-24T08:07:06.733 回答
0

这个问题困扰了我一段时间。我的自定义 CMS 做了一些相当复杂的处理、上传和操作,所以有时会输出很长的错误和信息消息,不适合转换为 GET 数据,我一直想避免数据 INSERT 的重新加载问题,但是还没有找到合适的解决方案。

我相信解决这个问题的正确方法是为每个可能的状态创建消息数组 - 您可能想要显示的每个消息或错误,然后您只需要发送比 long 更容易处理的错误/消息编号数据字符串,但这是我个人一直回避的东西,因为我觉得它有点乏味和麻烦。坦率地说,这可能只是我的懒惰。

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

于 2008-12-15T09:42:51.727 回答
-3

我希望你的问题是正确的。你可以试试这个:

  1. 调整你的表格看起来像这样:

表单方法=“POST”操作=“process_data.php”

2. 然后你创建文件 process_data.php,它出人意料地处理数据。
在此文件中,您使用标题:
例如:

$head = sprintf("page.php?data1=%d?data2=%d",$data1,$data2);
标头($头);

我希望我能帮上忙。

于 2008-11-22T12:12:18.127 回答