English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

PHP Basic Tutorial

PHP Advanced Tutorial

PHP & MySQL

PHP Reference Manual

Валидация форм PHP

В этом руководстве вы узнаете, как использовать PHP фильтры для очистки и проверки данных формы.

очистка и проверка данных формы

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

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

Вот наш многофункциональный скрипт PHP, который выполняет следующие действия:

  • Он попросит пользователя ввести свои комментарии о сайте.

  • Тот же скрипт отображает форму контакта и обрабатывает отправленные данные формы.

  • Этот скрипт очищает и проверяет ввод пользователя. Если отсутствует любое обязательное поле (отмеченное *) или проверка失败了 из-за неправильного ввода, скрипт повторно отобразит форму и покажет ошибку в соответствующем поле формы.

  • Этот скрипт запомнит заполненные пользователем поля и предварительно заполнит эти поля, когда форма будет повторно отображаться из-за ошибки проверки.

  • Если данные пользователя можно принять и все идет顺利, он отправит электронное письмо администратору сайта и покажет пользователю успешное сообщение.

В файле «contact.php» введите следующий код и сохраните его в корневой каталог проекта:

<?php
//过滤用户输入的函数
function filterName($field){
    //清理用户名
    $field = filter_var(trim($field), FILTER_SANITIZE_STRING);
    
    //验证用户名
    if(filter_var($field, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){
        возврат $field;
    } else{
        возврат FALSE;
    }
}    
function filterEmail($field){
    //清理电子邮件地址
    $field = filter_var(trim($field), FILTER_SANITIZE_EMAIL);
    
    //Проверка адреса электронной почты
    if(filter_var($field, FILTER_VALIDATE_EMAIL)){
        возврат $field;
    } else{
        возврат FALSE;
    }
}
function filterString($field){
    // 清理字符串
    $field = filter_var(trim($field), FILTER_SANITIZE_STRING);
    если (!пуст($field)){}}
        возврат $field;
    } else{
        возврат FALSE;
    }
}
 
//Определение переменных и инициализация их пустыми значениями
$nameErr = $emailErr = $messageErr = "";
$name = $email = $subject = $message = "";
 
//Обработка данных формы при отправке формы
если ($_SERVER["REQUEST_METHOD"] == "POST"){
 
    //Проверка имени пользователя
    если (пуст($_POST["name"])){
        $nameErr = "Please enter your name.";
    } else{
        $name = фильтрИмени($_POST["name"]);
        если ($name == FALSE){
            $nameErr = "Пожалуйста, введите действительное имя.";
        }
    }
    
    //Проверка адреса электронной почты
    если (пуст($_POST["email"])){
        $emailErr = "Пожалуйста, введите ваш адрес электронной почты.";     
    } else{
        $email = фильтрЭлектроннойПочты($_POST["email"]);
        если ($email == FALSE){
            $emailErr = "Please enter a valid email address.";
        }
    }
    
    //Validate тема сообщения
    если (пуст($_POST["subject"])){
        $subject = "";
    } else{
        $subject = фильтрСтроки($_POST["subject"]);
    }
    
    //Проверка комментария пользователя
    если (пуст($_POST["message"])){
        $messageErr = "Please enter your comment.";     
    } else{
        $message = фильтрСтроки($_POST["message"]);
        если ($message == FALSE){
            $messageErr = "Пожалуйста, введите действительный комментарий.";
        }
    }
    
    //Проверка ошибок ввода перед отправкой электронной почты
    если (пуст($nameErr) и пуст($emailErr) и пуст($messageErr)){
        // Recipient email address
        $to = '[email protected]';
        
        // Create email headers
        $headers = 'From: '. $email . '\r\n'.
        'Reply-To: '. $email . '\r\n'.
        'X-Mailer: PHP/' . phpversion();
        
        // Sending email
        if(mail($to, $subject, $message, $headers)){
            echo '<p class="success">Ваше сообщение успешно отправлено!</p>';
        } else{
            echo '<p class="error">Электронная почта не может быть отправлена. Пожалуйста, попробуйте еще раз!</p>';
        }
    }
}
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Contact Form</title>
    <style type="text/css">
        .error{ color: red; }
        .success{ color: green; }
    </style>
</head>
    <h2>Свяжитесь с нами</h2>
    <p>Заполните эту форму и отправьте нам</p>
    <form action="contact.php" method="post">
        <p>
            <label for="inputName">Name:<sup>*</sup></label>
            <input type="text" name="name" id="inputName" value="<?php echo $name; ?>">
            <span class="error"><?php echo $nameErr; ?></span>
        </p>
        <p>
            <label for="inputEmail">Email:<sup>*</sup></label>
            <input type="text" name="email" id="inputEmail" value="<?php echo $email; ?>">
            <span class="error"><?php echo $emailErr; ?></span>
        </p>
        <p>
            <label for="inputSubject">Тема:</label>
            <input type="text" name="subject" id="inputSubject" value="<?php echo $subject; ?>">
        </p>
        <p>
            <label for="inputComment">Сообщение:<sup>*</sup></label>
            <textarea name="message" id="inputComment" rows="5" cols="30"><?php echo $message; ?></textarea>
            <span class="error"><?php echo $messageErr; ?></span>
        </p>
        <input type="submit" value="Отправить">
        <input type="reset" value="Сброс">
    </form>
</html>

Использование кода

Вы, возможно, думаете о значении всего этого кода. Давайте перейдем direkt в.

  • функция filterName() проверяет, является ли значение ввода именем. Допустимые имена могут содержать только буквы (a-z, A-Z).

  • функция filterEmail() проверяет значение ввода на соответствие адресу электронной почты.

  • функция filterString() очищает значение ввода, удаляя HTML-теги и специальные символы. Она не проверяет значение ввода.

  • внутри тега<form>атрибут action="contact.php" указывает на то, что форма будет отображаться и обрабатывать данные в файле contact.php.

  • <input>и<textarea>PHP-коду в атрибуте value, например <?php echo $name; ?> при форме возвращает предварительно заполненные значения при повторной проверке ошибки.

  • PHP-коду в классе .error, например <span class="error"><?php echo $nameErr; ?></span> показывает ошибку соответствующего поля.

 Для получения дополнительной информации о очистке и проверке фильтров обратитесь кPHP фильтрыСм. также.

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