2008-11-22 395 views
6

我是PHP新手,我正在尝试做一些可能是不好的做法,可能是不可能的。我基本上只是一起黑客攻击测试我的知识,看看PHP可以做什么。PHP用POST数据打开另一个网页

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

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

编辑:我从响应采取的是,它是可能要做到这一点使用各种黑客,但我最好是只有在一个文件中的处理和显示代码。我对此感到高兴;这是一个比任何事情都重要的实验。

回答

4

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

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

Display.php的:

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

包含必要的处理POST请求的代码process.php。

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

-3

我希望我能正确地解决您的问题。 你可以试试这个:

  1. 调整的形式是这样的:

形式方法= “POST” ACTION = “process_data.php”

2. 然后你创建文件process_data.php,令人惊讶地处理数据。
而在这个文件中,您使用头:
例如:

$头= sprintf的( “?page.php文件数据1 =%d数据2 =%d”,$数据1,$数据2);
header($ head);

我希望我能帮上忙。

+0

嗯......如果你投我一票,也许你可以给我一个理由?!?! – Nick 2008-11-22 16:33:47

+0

我没有downvote你,但你提供的代码示例不起作用 – 2008-11-23 15:48:51

+0

header($ head)应该是header('Location:'。$ head);虽然这个例子看起来像一个坏习惯...... – alex 2009-04-21 00:22:59

16

您可以将该数据存储在会话中,例如在处理后

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

,第一个文件,你可以像

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

下一页阅读它,或者你可以通过它通过GET:(但是按照意见,这是一个坏主意)

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

如果你这样做确保你做page.php文件额外的处理/验证为恶意用户可以改变的变量。你也可能不需要传送到下一个页面的整个后

编辑

我应该清楚,我认为第二个选项是可能更糟,因为你是数据的大小,您可以发送限制通过获取,它可能不太安全,因为用户可以更明显地操纵数据。

0

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

总之,这是不可能的

0

据我所知这是一个两步的过程通常是完成:

  1. 在form.php的,POST数据到脚本process.php
  2. 过程.php脚本处理数据,但从不输出任何东西本身,它总是调用header(“Location:asdasd”)重定向到success.php或failure.php页面(如果适用)
2

您可以使用Jav aScript作为一个肮脏的变通:

<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> 

(脚本应该是下面的表格)

0

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

<?php if($doingForm) { ?> 

html for form here 

<?php } else { ?> 

html for results 

<? } ?> 
0

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

我相信正确的方法是为每个可能的状态创建消息数组 - 每个消息或错误,你可能想要显示,然后你只需要发送错误/消息号码,这是很容易来处理比长数据字符串更长的时间,但这是我总是避开个人身份的,因为我觉得它有点繁琐和麻烦。坦率地说,这可能只是我的懒惰。

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

相关问题