Php 如何发布$\u post值

Php 如何发布$\u post值,php,http-post,reusability,Php,Http Post,Reusability,我想知道是否有人能帮我再次发布$\u POST值。假设我将表单值发布到post.php,在那里我可以通过$\u post或$\u REQUEST变量访问数据。但是我如何才能将$\u post发布到另一个url,比如说post\u one.php并访问那里的数据?例如使用cURL。您可以将$\u POST作为POST数组传递 <?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://example.com/post_one.

我想知道是否有人能帮我再次发布
$\u POST
值。假设我将表单值发布到post.php,在那里我可以通过$\u post$\u REQUEST变量访问数据。但是我如何才能将$\u post发布到另一个url,比如说post\u one.php并访问那里的数据?

例如使用cURL。您可以将$\u 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);

如果要在重定向用户(即浏览器)时保留POST数据,请创建包含POST数据的新表单(确保使用
htmlspecialchars
),然后提交此表单(将其发送到新的目标位置)


如果这完全是服务器端的,您只需使用
cURL
file\u get\u contents
执行一个简单的POST请求即可。php.net有很多关于这个主题的信息。

您必须向url发出HTTP POST请求。一个选项是使用并提供上下文来完成此操作。创建上下文很容易使用。一个例子如下:

$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请求
$\u POST['first']
$\u POST['second']
将在您的目标url中提供

如果要重新发布所有已发布的变量,请将第一行替换为:

$data = http_build_query($_POST);

我假设您希望第二个URL是用户可见的,在这种情况下,有多种方法:

  • 只需将相关数据添加到表单中的隐藏字段中,然后将该表单发布到新位置

  • 将相关数据存储在$session变量中,并使用
    标题('Location:/…')以重定向到新目标。然后,您可以从所需位置的$\u会话数组中检索数据

  • 将所需变量添加到查询字符串中,并使用
    标题('Location:/…xxx.php?example=true')以重定向到新目标。然后,数据将通过$\u GET superglobal数组提供


  • 其中,我推荐第二种方法,因为它会阻止最终用户看到数据。

    这取决于您在post_one.php中拥有什么,如果它只是函数,并且它们需要与post.php中相同的$u post var才能工作,那么您可以只包含以下文件:

    include 'path/to/post_one.php';
    
    其中的功能将访问$\u POST


    但是,如果它输出某种html或需要重定向到它才能正常工作,那么它可能会有问题,不要这样做。

    post.php
    中:

    session_start();
    $_SESSION['POST'] = $_POST;
    
    session_start();
    $_POST = $_SESSION['POST'];
    
    然后在
    post_one.php
    中:

    session_start();
    $_SESSION['POST'] = $_POST;
    
    session_start();
    $_POST = $_SESSION['POST'];
    

    实际上不需要最后一行,您可以通过
    $\u SESSION['POST']
    直接访问数据。

    您想在没有用户干预的情况下,还是仅仅通过重新发布另一个表单来执行此操作?如果您需要向用户显示另一个页面,则无法通过用户干预和用户重定向到另一个页面。但最好不要创建隐藏的形式:-)我最讨厌的是-这是一些人喜欢的最高抽象级别。“假设我们有一个网站,想象我们必须执行任何动作。怎么做?”很难说那是什么形式,那是另一个脚本,这一切都是为了什么?我对“抽象级别”感到抱歉,但有什么问题吗?它可以有一个文本输入。如果可以对一个表单字段执行此操作,则可以对任何其他表单字段执行此操作。我可以在脚本中输入任何可以工作的内容。确实,会话可以是一个选项。如果需要显示新发布信息的结果,只需echo$result。如何在同一会话中发布数据?这将使当前url保留在此页面,无法重定向到发布目标页面。如何解决?