Как выполнить остальную часть php-скрипта после вывода json_encode?

У меня есть простая форма с четырьмя полями ввода, именем, адресом электронной почты, телефоном и сообщением. Я использую 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 будет продолжаться до тех пор, пока данные не будут отправлены по электронной почте. Однако этого не происходит.

Итак, вы хотите отправить электронное письмо, даже если произойдет какая-либо ошибка проверки?

Ropali Munshi 19.02.2019 06:53

Если ошибки нет, предположим, что это сделает $errors = null, json_encode() не запустится. Я думаю, вам нужно проверить значение $errors.

user1334621 19.02.2019 06:58

Ваш вопрос довольно неясен (и сбивает с толку). Почему вы хотите отправить электронное письмо об ошибках? Разве это не ошибки проверки формы? Кроме того, у нас есть без понятия, как вы определяете переменную $errors или что она содержит в какой ситуации. Пожалуйста, уточните, что вы на самом деле хотите, и покажите нам больше вашего кода (например, что на самом деле происходит перед этим).

M. Eriksson 19.02.2019 07:17

Используйте var_dump, чтобы узнать, что на самом деле содержит $errors в этом случае.

04FS 19.02.2019 08:52

Я не отправляю письмо об ошибках. Сначала я фиксирую ошибки проверки в массиве. Затем используйте оператор «if», чтобы отправить значения массива ошибок обратно на html-страницу и выйти из скрипта. Если ошибок нет, я позволяю сценарию продолжать работу до тех пор, пока электронное письмо не будет отправлено. Однако, как только я использую функцию echo JSON_Encode для отправки статуса, сценарий завершится, независимо от того, были ошибки или нет.

Hassan 19.02.2019 12:21

Вот результаты, которые я получаю, когда у меня нет ошибок проверки: Результат: [null,null,null,null,null,null,null] contactForm.htm:323:13 json parsed: ,,,,,,

Hassan 19.02.2019 12:24

И вот сообщение, которое я получаю, когда использую 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 }

Hassan 19.02.2019 12:42

Вместо этого if ( $errors != null ) попробуйте это -> if (!empty($errors))

Swati 19.02.2019 15:04
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
8
192
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Другие вопросы по теме