【问题标题】:How redirect user with all variables coming with POST如何使用 POST 附带的所有变量重定向用户
【发布时间】:2010-09-21 05:05:31
【问题描述】:

我有一个带有action="script1.php"的html表单

在 script1 中,我需要将所有数据写入数据库并重定向到 script2.php,但我需要将所有发布到 script1 的参数发送到 script2。 mod_rewrite 已开启

如何使用 PHP 重定向所有数据都来自 POST ?

如果我喜欢这种恶心的做法,但是

<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
<!--
function Search(){
wpc_form.submit();
}
// -->
</script>
</HEAD>
<BODY onload='Search()'>
 <form name=wpc_form  method="post" action="/script2/">
 <?php
foreach($_REQUEST as $name => $value)
echo '<input type="hidden" name="'.$name.'" value="'.$value.'">'
 ?>

 </form>

【问题讨论】:

    标签: php http forms redirect


    【解决方案1】:

    不可能。
    但你不需要它。因为您已经拥有所有这些数据。只需从script2.php中的数据库中读取它

    【讨论】:

    • script2 it service not mine in script1 我将数据写入数据库,但我还需要发送到 script2
    • @Alehandro 是什么阻止了 script2 从数据库中获取数据?
    • script2(urlService) 服务运行在 POST 中传输某些数据所需的逻辑(它不是我的服务,我无权访问它们)
    • @Alehandro 好吧,如果不是你自己的服务,让用户直接和这个服务通信,不要干涉。
    • 如果我用hiden fild 做表单并使用js 提交它们?这是令人作呕的做法吗?
    【解决方案2】:

    除非您在浏览器中运行自定义客户端代码以从响应消息正文中提取状态以填充表单字段,否则重定向不允许您执行此操作。这是高级用法,可能不是您真正想要做的。

    如果您确实需要在表单之间传输状态,那么您可以使用会话来执行此操作。浏览器中的表单无法访问数据,但您在服务器上运行的 PHP 脚本可以在请求之间存储值。 Here 是 PHP 会话教程的链接,可能对您有用。这种方法通常用于维护请求之间的应用程序状态并重定向到第三方服务,例如 OpenID 提供程序等。

    【讨论】:

    • 谢谢你理查德库克。我知道这个问题的哪个会话不适合。
    • 另一种方法可能是对重定向 URL 中的参数进行编码。然后表单可以通过 JavaScript 访问参数并以这种方式填充表单。
    【解决方案3】:

    您可以使用 cURL 库(或类似库)从本地脚本向外部服务发送单独的 POST 请求。

    // assemble data from your post here:
    $data = array('formfield' => 'data', 'otherfield' => 'otherdata');
    
    // and then send it off somewhere else
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'http://somewhere.else');
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_exec($ch);
    

    【讨论】:

    • 对,它不会重定向,它是一个单独的请求。您必须在脚本的其余部分自己处理任何重定向。
    • 在上面的所有代码之后我使用了 header("Location:somewere.else"); 只是添加刷新的数据?
    • $data = $_POST; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'somewhere.else'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_exec($ch); header("Location:someURL");它发送获取请求(没有参数数据)我做错了什么?
    • 它应该是一个 POST,除非外部服务正在做某事。如果服务在内部重定向,使其成为 GET,请尝试添加 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true)。如果它需要一个 HTTP 引用标头,您可以使用curl_setopt($ch, CURLOPT_REFERER, /*value*/) 进行设置。并检查curl_error($ch) 以查找其他任何问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 2012-10-28
    • 2017-01-09
    • 1970-01-01
    相关资源
    最近更新 更多