У меня есть простая форма с четырьмя полями ввода, именем, адресом электронной почты, телефоном и сообщением. Я использую JavaScript с Ajax для отправки полей ввода в файл PHP для проверки и отправки по почте через phpmailer.
Я собираю ошибки в массив из функций проверки. Я использую оператор and if для отправки ошибок обратно на html-страницу с помощью функции json_encode(array) и выхода из скрипта. В противном случае я позволяю сценарию продолжить работу и успешно отправлю электронное письмо в свой почтовый ящик.
У меня проблема json_encode(array) выйти из скрипта где были найдены ошибки или нет. Даже если я не выйду из скрипта принудительно с помощью команды die или exit. В этом отношении электронное письмо не отправляется, так как скрипт преждевременно завершается.
Ниже я перечислил несколько строк из моего php-файла, чтобы показать, как настроен мой оператор if.
Я искал в Интернете ответы безрезультатно. Я попытался поместить функцию json_encode в другое место в файле, и это не сработало. Я попытался объединить массив ошибок со строками успеха или неудачи из функции отправки почты, но это не сработало.
if ( $errors != null ) {
echo json_encode( $errors );
exit;
} else {
$mail = new PHPMailer( true );
/* Set the mail sender. */
$mail->setFrom( '[email protected]', 'John Smith' );
/* Add a recipient. */
//set who is receving mail
$mail->addAddress( '[email protected]' );
/* Set the subject. */
$mail->Subject = 'New message from contact form';
/* Set email to be sent as HTML */
$mail->isHTML( true );
/* Set the mail message body. */
$mail->Body =
Я ожидаю, что после того, как оператор if очистит ошибки, весь скрипт файла php будет продолжаться до тех пор, пока данные не будут отправлены по электронной почте. Однако этого не происходит.
Если ошибки нет, предположим, что это сделает $errors = null, json_encode() не запустится. Я думаю, вам нужно проверить значение $errors.
Ваш вопрос довольно неясен (и сбивает с толку). Почему вы хотите отправить электронное письмо об ошибках? Разве это не ошибки проверки формы? Кроме того, у нас есть без понятия, как вы определяете переменную $errors или что она содержит в какой ситуации. Пожалуйста, уточните, что вы на самом деле хотите, и покажите нам больше вашего кода (например, что на самом деле происходит перед этим).
Используйте var_dump, чтобы узнать, что на самом деле содержит $errors в этом случае.
Я не отправляю письмо об ошибках. Сначала я фиксирую ошибки проверки в массиве. Затем используйте оператор «if», чтобы отправить значения массива ошибок обратно на html-страницу и выйти из скрипта. Если ошибок нет, я позволяю сценарию продолжать работу до тех пор, пока электронное письмо не будет отправлено. Однако, как только я использую функцию echo JSON_Encode для отправки статуса, сценарий завершится, независимо от того, были ошибки или нет.
Вот результаты, которые я получаю, когда у меня нет ошибок проверки: Результат: [null,null,null,null,null,null,null] contactForm.htm:323:13 json parsed: ,,,,,,
И вот сообщение, которое я получаю, когда использую print_r($errors):Array ([0] => [1] => [2] => [3] => [4] => [5] => [ 6] => ). И вот сообщение, которое я получаю, когда использую var_dumb($errors): array(7) {[0]=> NULL [1]=> NULL [2]=> NULL [3]=> NULL [4]= > NULL [5] => NULL [6] => NULL }
Вместо этого if ( $errors != null ) попробуйте это -> if (!empty($errors))



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я нашел ответ на другой связанный вопрос, который я разместил в другом сообщении. Массив ошибок содержал все нулевые переменные, которые условный оператор, который я должен был определить, следует ли отправлять почту с логическим значением false (ошибки не найдены), не считал массив пустым. Мне пришлось изменить условный оператор if, чтобы вместо него использовать array_filters.
Итак, вы хотите отправить электронное письмо, даже если произойдет какая-либо ошибка проверки?