English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этом руководстве вы узнаете, как использовать 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() работала нормально. Если вы хотите выполнить только проверку формы, вы можете заменить часть почты своим собственным пользовательским кодом.