Переменные в PHP теряются после запроса ajax - PullRequest
0 голосов
/ 25 января 2020

Моя цель - принять платеж через чередующийся или PayPal, как только он будет завершен, предоставить клиенту форму для загрузки файла для отправки мне по электронной почте. Моя форма в моде bootstrap. Я пытаюсь сделать так, чтобы форму нельзя было отправить, пока не будет произведен платеж.

В настоящее время клиент производит платеж, завершенный на ajax. Это отлично работает и отображается с идентификатором платежа. Однако, когда я отправляю другой запрос ajax в тот же документ php, чтобы завершить отправку электронной почты, используя $send_form = $_POST["email_form"];, переменная $payment_made потеряла свое значение.

<?php
$send_form = $_POST["email_form"]; //this is sent by ajax. Will be 'yes' if the form to send has been submitted.

switch ($action){
  case 'stripe':
    //do stripe transaction
    //set a variable to indicate payment is complete using transaction ID
    $payment_made = $transaction->id;
  break;
  case 'paypal':
    //do paypal transaction
    //set a variable to indicate payment is complete using transaction ID
    $payment_made = $transaction->id;
  break;
}

function sendmail() {
  //usual php mail function (works fine)
}

if ($send_form = 'yes' && $payment_made != '') {
  sendmail();
}
?>

Моя проблема: как мне использовать переменную $payment_made для проверки того, что платеж выполнен, чтобы предотвратить несанкционированное использование формы электронной почты?

Я не буду загружать ajax или html код, если он не запрошен, так как все работает правильно, при условии, что я не проверяю переменную $payment_made перед использованием phpmail().

1 Ответ

0 голосов
/ 25 января 2020

Благодаря @ Juakali92 и @ alithedeveloper.

Я использовал PHP сессий для хранения, а затем удаления переменных.

<?php
session_start();
$send_form = $_POST["email_form"]; //this is sent by ajax. Will be 'yes' if the form to send has been submitted.

switch ($action){
  case 'stripe':
    //do stripe transaction
    //set a variable to indicate payment is complete using transaction ID
    $_SESSION["payment_made"] = $transaction->id;
  break;
  case 'paypal':
    //do paypal transaction
    //set a variable to indicate payment is complete using transaction ID
    $_SESSION["payment_made"] = $transaction->id;
  break;
}

function sendmail() {
  //usual php mail function (works fine)
  session_unset();
  session_destroy();
  mail();
}

if ($send_form = 'yes' && $_SESSION["payment_made"] != '') {
  sendmail(); 
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...