Как запустить php-файл как скрипт, не загружая его как html-документ?

#php #html #forms

#php #HTML #формы

Вопрос:

У меня есть html-форма и php-файл в качестве ее действия. Когда я нажимаю кнопку отправки, он запускает php-код, но также загружает пустую страницу, и URL-адрес изменяется.

Как я могу просто запустить код и остаться на той же HTML-странице?

Комментарии:

1. Просто используйте ajax, пожалуйста (есть много в учебнике / ссылке на это, если вы Google)

2. Поместите свою форму и php-код на одну страницу, отправьте на эту страницу

3. перейдите по этой ссылке, чтобы легко выполнить руководство w3schools.com/xml/ajax_php.asp

Ответ №1:

Похоже, вам может потребоваться выйти за рамки парадигмы «одна страница = один скрипт». Теперь существует несколько возможных подходов к «не покиданию страницы», таких как:

  1. Включите код обработки формы в саму страницу формы. Плюсы: Действительно простой и элементарный. Минусы: код не может быть повторно использован.
  2. Отправьте форму с помощью javascript (AJAX / Fetch). Плюсы: «Современный» и элегантный, когда все сделано правильно. Минусы: относительно сложно. Требуется как PHP, так и Javascript.
  3. Самый простой «элегантный» подход: отделите свою логику обработки форм и включите / вызовите со страницы при отправке формы. Базовый пример:
 <?php /* form.php */

if(!empty($_POST)) { // if form was submitted ("post")
    include 'form_processor.php';
    $result = process_form($_POST);
    echo 'Form Process Result: ' . $result;
}
?>

<form action="form.php" method="post">
... your HTML form here ...
</form>

 
 <?php /* form_processor.php */

function process_form($post, $args = []) {
    $errors = [];
    
    // do stuff with the post data: validate, store, etc.
    
    if(count($errors) > 0) {
        $result = 'Errors: ' . implode(', ', $errors);
    } else {
        $result = 'Okay';
    }
    return $result;
    
}
 

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