Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用cURL发送表单数据并从远程API接收JSON验证错误_Php_Json_Curl - Fatal编程技术网

Php 使用cURL发送表单数据并从远程API接收JSON验证错误

Php 使用cURL发送表单数据并从远程API接收JSON验证错误,php,json,curl,Php,Json,Curl,由于本地web服务器上的一些限制,我不得不使用cURL在远程服务器上处理注释表单数据 我想要实现的是:通过cURL将表单数据发送到远程验证脚本,远程验证脚本检查用户输入的错误。如果存在错误,远程脚本应将“特定”错误发送回本地脚本。如果没有错误,我的远程验证脚本应向我发送电子邮件,并输出一条成功消息,我应在本地文件中接收该消息,如果提交成功与否,我将向填写表单的用户输出该消息 这是我的本地文件Process.php的一个片段 $Email = $_POST['Email']; $Comme

由于本地web服务器上的一些限制,我不得不使用cURL在远程服务器上处理注释表单数据

我想要实现的是:通过cURL将表单数据发送到远程验证脚本,远程验证脚本检查用户输入的错误。如果存在错误,远程脚本应将“特定”错误发送回本地脚本。如果没有错误,我的远程验证脚本应向我发送电子邮件,并输出一条成功消息,我应在本地文件中接收该消息,如果提交成功与否,我将向填写表单的用户输出该消息

这是我的本地文件Process.php的一个片段

$Email = $_POST['Email'];
    $Comment = $_POST['Comment'];
    $ch = curl_init();
    $api ="http://RemoteServer.com/Sendmail.php"; 

    $cu = "$api?Email=$Email&Comment=$Comment";
    curl_setopt($ch, CURLOPT_URL, $cu);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 20);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $result = curl_exec($ch);
    curl_close($ch);
这里还有我的远程文件的一个片段

现在,我希望实现的是:

在我的本地文件Process.php中,我应该能够从远程文件Sendmail.php接收错误,并以这种方式使用它:

if (errors_from_remote_file) {

//--- Redirect user to error page to notify of form validation errors
header("Location: ./Error.php"); 
    exit();

} else {

//--- Redirect user to Success page if form successfully validated and email sent to me
header("Location: ./Success.php"); 
    exit();

}
目前,我已经试过了

if (isset($_POST))
and if (isset($_GET))
我在远程文件Sendmail.php中都有从本地文件Process.php检索cURL发送的表单数据,但仍然无法获取表单数据

我真的需要关于如何使用cURL检索从Process.php发送到Sendmail.php的post数据的帮助

一旦实现了这一点,我还想知道如何从本地文件Process.php中的远程文件Sendmail.php检索错误,并根据远程文件Sendmail.php中的错误或成功输出,使用它成功地将用户重定向到下一页


感谢所有人。

感谢到目前为止作出回应的所有人。对于
$\u POST
错误,我发现我缺少一个
分号。一旦我对它进行了排序,我就能够正确地检索POST数据

至于来自远程文件
Sendmail.php
的JSON结果,我能够通过解码JSON对象来输出错误或成功通知,并使用它来操纵位置,以便在出错或成功时指导用户。以下是我的localfile中使用的示例代码:

   $fp = fopen(dirname(__FILE__).'/errorlog.txt', 'w'); //-- To monitor cURL procedure
$data = array("name"=>"ohidul","age"=>20);
   $string = http_build_query($data);
  $ch = curl_init("http://RemoteServer.com/Sendmail.php");
   curl_setopt($ch, CURLOPT_POST,true);
   curl_setopt($ch, CURLOPT_POSTFIELDS,$string);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
   curl_setopt($ch, CURLOPT_STDERR, $fp);
   curl_exec($ch);
   $response = curl_exec($ch);
   curl_close($ch);
 //-------------DECODE JSON ERROR FROM REMOTE FILE---------------------------------  
$RemoteResponse = json_decode($response);

if ($RemoteResponse == "Failed") {

    header("Location: ./Error.php"); 
    exit();
} else {

    header("Location: ./Success.php"); 
    exit();
}
//---------------------------------------------

我犯了一些基本的错误,没有注意到丢失的分号,我还认为阅读JSON上的一些TUT是一个漫长的过程。但是,我浏览了JSON上的几行代码,我自己就可以完成了。起初令人沮丧,但我很高兴我通过自己的学习学会了艰难的道路。

首先,您从本地脚本以参数形式发送输入,但试图通过远程服务器上的$\u POST访问它。其次,您没有在远程脚本的ELSE部分返回错误。@djunehor如果我使用参数,那么如何在远程文件中检索?其次,远程文件的else部分只能有一个错误,即如果sendmail失败,但这并不重要,因为我可以编写它。重要的是我在前面的问题中提到的几点。“我真的需要关于如何检索post数据的帮助”-也许可以从实际发出post请求开始?关于如何在PHP中使用cURL实现这一点的详细信息,您应该能够轻松地研究自己。“我还想知道如何在本地文件Process.PHP中从远程文件Sendmail.PHP检索错误”-您可以访问$result中的响应体。既然您发送的是JSON,下一步就是对其进行解码,这样您就可以再次访问数据结构中的元素,并根据这些元素做出决定。@04FS谢谢您的写作。然而,英语不是我的第一语言,也许我没有把它说对。当然,我知道如何检索post数据,这是最基本的东西。检查我的远程文件,查看我是否已检索到$\u POST数据。我的经验是,我无法从$\u POST获取数据,我也不知道我是否在CURL请求中传递了正确的参数。至于localfile中的$result,我还尝试对响应进行解码,但没有得到任何结果。
   $fp = fopen(dirname(__FILE__).'/errorlog.txt', 'w'); //-- To monitor cURL procedure
$data = array("name"=>"ohidul","age"=>20);
   $string = http_build_query($data);
  $ch = curl_init("http://RemoteServer.com/Sendmail.php");
   curl_setopt($ch, CURLOPT_POST,true);
   curl_setopt($ch, CURLOPT_POSTFIELDS,$string);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
   curl_setopt($ch, CURLOPT_STDERR, $fp);
   curl_exec($ch);
   $response = curl_exec($ch);
   curl_close($ch);
 //-------------DECODE JSON ERROR FROM REMOTE FILE---------------------------------  
$RemoteResponse = json_decode($response);

if ($RemoteResponse == "Failed") {

    header("Location: ./Error.php"); 
    exit();
} else {

    header("Location: ./Success.php"); 
    exit();
}
//---------------------------------------------