如何将整个$ POST数组从同一页面发送到外部php页面?

时间:2018-04-14 08:45:36

标签: php html

我有一个html页面,顶部的PHP表单验证,以检查字段是否为空,之后是一个html表单,之后一些html显示错误消息,如果字段没有填写。表单的顶部看起来像:

  <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">

在页面顶部的PHP中,我检查输入字段是否为空。

if($_SERVER["REQUEST_METHOD"]==='POST')
{

          if($_POST["field1"]==""){
                    $errormessage = "field1 is not empty";

           }elseif($_POST["field2"]==""){
                 $errormessage = "field1 is not empty";
            }else{
            // if the fields are both filled in i want to send the form 
            //variables to mailing.php where are the variables are mailed

}

这是我的页面中错误代码的html:      

如果两个字段都已填满,我想将POST数据发送到mailing.php,我可以将变量格式化为html电子邮件。

我现在知道这个代码这是可能的。

头( '位置:?mailing.php名称=东西第二=东西')

但我有很多领域。超过50。 有没有办法可以将所有变量(整个$ POST)发送到另一个页面? 就像你一样:

<form action="mail.php" method="post">

所以在mail.php中,我可以发送这样的邮件:

echo ' <html> <body>';
echo '<table class="aanvraagtabel" cellpadding="4">';
echo '<tr>';
echo '<th> Field1: </th>';
echo '<td>'.$_POST["field1"].'</td>';
echo '</tr>';
echo '</table>';
echo ' </html> </body>';

2 个答案:

答案 0 :(得分:0)

您可以将header()$_POST一起使用,因为$_POST包含所有发布的字段

if($_SERVER["REQUEST_METHOD"]==='POST')
{
    if($_POST["field1"]==""){
        $errormessage = "field1 can not be empty.";
    }elseif($_POST["field2"]==""){
        $errormessage = "field2 can not be empty.";
    }else{
        header('location:mailing.php?' . http_build_query($_POST));
        exit;
    }
}

答案 1 :(得分:0)

上述解决方案会将您重定向到另一个php页面,您必须在mailing.php文件中收听$ _GET。

以下函数将对给定的url执行另一个post请求:

function postTo($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($_POST));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch); // Just in case needed. I think you dont really needs this because on the other script you just sends an email.
    curl_close ($ch);

    return $response;
}

将它集成到您​​的代码中应该如下所示:

if ($_SERVER["REQUEST_METHOD"]==='POST')
{
    if ($_POST["field1"]=="") {
        $errormessage = "field1 is not empty";
    } elseif ($_POST["field2"]=="") {
        $errormessage = "field1 is not empty";
    } else {
        $url = $_SERVER["SERVER_PROTOCOL"] . $_SERVER['HTTP_HOST'] ."/mailing.php";
        $response = postTo($url);
    }
}

我想提一下,还有一些其他库可以简化这些代码,例如Guzzle。你可能想看看。

希望有所帮助, 伊甸