Отправка данных формы с использованием cURL и получение ошибки проверки JSON от удаленного API - PullRequest
0 голосов
/ 05 ноября 2019

Из-за некоторых ограничений на моем локальном веб-сервере я вынужден обрабатывать данные формы комментариев на удаленном сервере с использованием 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);

Здесь также есть фрагмент моего удаленного файла http://RemoteServer.com/Sendmail.php


    /**************************************************/
//-- data and error arrays  
$errors         = array();      // array to hold validation errors
$data           = array();      // array to pass back data
/***************************************************/


    /*********** CLEAN INPUTS **************************/
// Create function to clean input
function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}

/******************************************************/

/********************************* VALIDATION ******************************************************/
if ( !empty($_POST)) {
/***************** DEFINE $_POST Data ************************/
$Email = test_input($_POST["Email"]);
$Comment = test_input($_POST["Comment"]);

if (empty($Email)) {
        $errors['Error'] = 'Enter your email';

} elseif (!filter_var($Email, FILTER_VALIDATE_EMAIL)) {

 $errors['Error'] = 'Invalid email';

  } elseif (empty($Comment)) {
        $errors['Error'] = 'Enter a comment';

}  else {

//Send email to myself and output success


 $data['success'] = true;


}

if ( ! empty($errors)) {
        // if there are items in our errors array, return those errors
        $data['success'] = false;
        $data['errors']  = $errors;
    } else {

    $data['success'] = true;

        // if there are no errors process our form, then return a message


    }
    // return all our data to an AJAX call
    echo json_encode($data); 
}//--END IF NOT EMPTY POST
 else {
    $data['success'] = false;
        $data['errors']  = $errors;
}

Теперь я надеюсь достичь следующего:

внутри моего локального файла 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, чтобы получить данные формы, отправленные cURL из локального файла Process. php и я все еще не могу получить данные формы.

Мне действительно нужна помощь о том, как извлечь данные поста, отправленные из Process.php с помощью cURL в Sendmail.php.

Как только это произойдетЯ хочу также знать, как я могу получитьОшибки из удаленного файла Sendmail.php в моем локальном файле Process.php и использовать его для успешного перенаправления пользователя на следующие страницы в зависимости от ошибок или успешного вывода в удаленном файле Sendmail.php

Благодарявсе.

1 Ответ

0 голосов
/ 06 ноября 2019

Спасибо всем, кто ответил до сих пор. Для ошибки $_POST я обнаружил, что мне не хватает semicolon. После сортировки я смог правильно получить данные POST.

Что касается результата JSON из удаленного файла Sendmail.php, я смог вывести сообщение об ошибке или уведомление об успехе, расшифровав объект JSON. и использовал его для манипулирования местоположением, чтобы направить пользователя в случае ошибки или в случае успеха. Вот пример кода, используемого в моем локальном файле:

   $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. Но я просмотрел несколько строк в JSON и смог сделать это сам. Сначала я разочаровался, но я счастлив, что научился трудному пути, учась сам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...