我想知道是否有人可以帮助再次发布$_POST
值。假设我将表单值发布到 post.php ,我可以通过 $ _ POST 或 $ _ REQUEST 变量访问数据。但是,如何将 $ _ POST 发布到另一个网址,让我们说 post_one.php 并在那里访问数据?
答案 0 :(得分:16)
您必须向您的网址发出HTTP POST请求。一个选项是使用file_get_contents执行此操作并提供上下文。使用stream_context_create可以轻松创建上下文。一个例子如下:
$data = http_build_query(
array(
'first' => 'your first parameter',
'second' => 'your second parameter'
)
);
$headers = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $data
)
);
$context = stream_context_create($headers);
$result = file_get_contents($url, false, $context);
这将向$ url发出POST请求。您的目标网址中将提供$_POST['first']
和$_POST['second']
。
如果要重新发布所有发布的变量,请将第一行替换为:
$data = http_build_query($_POST);
答案 1 :(得分:3)
如果要在重定向用户(即浏览器)时保留POST数据,请创建一个包含POST数据的新表单(确保使用htmlspecialchars
),然后提交此表单(将其发送给新的目标位置)。
如果这完全是服务器端,您可以使用cURL
或file_get_contents
执行简单的POST请求。 php.net有很多关于这个主题的信息。
答案 2 :(得分:2)
以cURL为例。您可以将$ _POST作为post数组传递。
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://example.com/post_one.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST);
curl_exec($ch);
答案 3 :(得分:1)
我假设你希望第二个URL是用户可见的,在这种情况下有很多方法:
只需将相关数据添加到表单中的隐藏字段中,然后将该表单发布到新位置。
将相关数据存储在$ _SESSSION变量中,并使用header('Location: /...');
重定向到新目标。然后,您可以在所需位置从$ _SESSION数组中检索数据。
将所需变量添加到查询字符串,并使用header('Location: /...xxx.php?example=true');
重定向到新目标。然后,数据将通过$ _GET超全局数组提供。
其中,我建议使用第二种方法,因为它会阻止数据对最终用户可见。
答案 4 :(得分:1)
这取决于你在 post_one.php 中的含义,如果只是它的功能,并且它们需要与 post.php 相同的$ _POST var才能工作,那么你可以包括文件:
include 'path/to/post_one.php';
其中的功能可以访问$ _POST。
但是如果它输出某种html或需要重定向才能正常工作,那么它就会变得毛茸茸,不要这样做..
答案 5 :(得分:0)
在post.php
:
session_start();
$_SESSION['POST'] = $_POST;
然后在post_one.php
:
session_start();
$_POST = $_SESSION['POST'];
实际上不需要最后一行,您可以直接通过$_SESSION['POST']
访问数据。