Contact Form

Руководство по валидации форм в PHP

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

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

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

  • Он попросит пользователя ввести свой комментарий о веб-сайте.
  • Тот же скрипт отображает контактную форму и обрабатывает отправленные данные формы.
  • Скрипт очищает и проверяет вводимые пользователем данные. Если какое-либо обязательное поле (отмеченное *) отсутствует или проверка не удалась из-за неправильных данных, скрипт повторно отображает форму с сообщением об ошибке для соответствующего поля формы.
  • Скрипт запоминает, какие поля пользователь уже заполнил, и предварительно заполняет эти поля, когда форма повторно отображается из-за ошибки проверки.
  • Если данные, представленные пользователем, приемлемы, и все идет хорошо, он отправит электронное письмо администратору веб-сайта и отобразит сообщение об успехе пользователю.

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

Читайте также:  Css input initial text

array("regexp"=>"/^[a-zA-Z\s]+$/")))) < return $field; >else < return FALSE; >> function filterEmail($field) < // Санитизация e-mail $field = filter_var(trim($field), FILTER_SANITIZE_EMAIL); // Валидация e-mail if(filter_var($field, FILTER_VALIDATE_EMAIL))< return $field; >else < return FALSE; >> function filterString($field) < // Санитизация строки $field = filter_var(trim($field), FILTER_SANITIZE_STRING); if(!empty($field))< return $field; >else < return FALSE; >> // Определяем переменные и инициализирем с пустыми значениями $nameErr = $emailErr = $messageErr = ""; $name = $email = $subject = $message = ""; // Обрабатываем данные формы при отправке формы if($_SERVER["REQUEST_METHOD"] == "POST") < // Валидация имени пользователя if(empty($_POST["name"]))< $nameErr = "Пожалуйста, введите ваше имя."; >else < $name = filterName($_POST["name"]); if($name == FALSE)< $nameErr = "Пожалуйста, введите верное имя."; >> // Валидация e-mail if(empty($_POST["email"])) < $emailErr = "Пожалуйста, введите адрес вашей электронной почты."; >else < $email = filterEmail($_POST["email"]); if($email == FALSE)< $emailErr = "Пожалуйста, введите действительный адрес электронной почты."; >> // Валидация темы сообщения if(empty($_POST["subject"])) < $subject = ""; >else < $subject = filterString($_POST["subject"]); >// Валидация комментария пользователя if(empty($_POST["message"])) < $messageErr = "Пожалуйста, введите свой комментарий."; >else < $message = filterString($_POST["message"]); if($message == FALSE)< $messageErr = "Пожалуйста, введите правильный комментарий."; >> // Проверяем ошибки ввода перед отправкой электронной почты if(empty($nameErr) && empty($emailErr) && empty($messageErr))< // Электронный адрес получателя $to = 'webmaster@example.com'; // Создаем заголовки письма $headers = 'From: '. $email . "\r\n" . 'Reply-To: '. $email . "\r\n" . 'X-Mailer: PHP/' . phpversion(); // Отправляем электронную почту if(mail($to, $subject, $message, $headers))< echo '

Ваше сообщение было отправлено успешно!

'; > else< echo '

Невозможно отправить электронное письмо. Пожалуйста, попробуйте еще раз!

'; > > > ?>
     .error < color: red; >.success 

Связаться с нами

Заполните эту форму, чтобы связаться с нами.

Разберем этот код подробнее.

  • Функция filterName() (строка №-03) проверяет входное значение емени пользователя. Допустимое имя может содержать только буквы алфавита (a-z, A-Z).
  • Функция filterEmail() (строка №-14) проверяет входное значение адреса электронной почты.
  • Функция filterString() (строка № 25) только очищает входное значение, удаляя HTML-теги и специальные символы. Она не проверяет входящее значение.
  • Атрибут action=»contact.php» (строка № 111) внутри тега указывает, что тот же файл contact.php отображает форму, а также обрабатывает данные формы.
  • Код PHP внутри атрибута value и , например. отображает предварительно заполненное значение, когда форма повторно отображается при ошибке проверки.
  • Код PHP внутри класса .error , например. отображает ошибку для соответствующего поля.

Чтобы узнать больше о санитизации и валидации, ознакомьтесь со справочником по фильтрам PHP.

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

etxt banner 480x320 smsc banner 480x320 kwork banner 480x320

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 5 / 5. Количество оценок: 2

Оценок пока нет. Поставьте оценку первым.

Похожие посты

Руководство по загрузке файлов на сервер в PHP

В этом руководстве мы узнаем, как загружать файлы на удаленный сервер с помощью простой HTML-формы и PHP. Вы можете загружать файлы любого типа, например изображения, видео, ZIP-файлы, документы Microsoft Office, PDF-файлы, а также исполняемые файлы и множество других типов файлов. Шаг 1. Создание HTML-формы для загрузки файла В следующем примере будет создана простая HTML-форма, которую…

Руководство по GET и POST запросам в PHP

Веб-браузер связывается с сервером, как правило, с помощью одного из двух HTTP-методов (протокола передачи гипертекста) — GET и POST. Оба метода передают информацию по-разному и имеют разные преимущества и недостатки, как описано ниже. PHP-метод GET В методе GET данные отправляются в виде параметров URL, которые обычно представляют собой строки пар имени и значения, разделенные амперсандами…

Список сообщений об ошибках в PHP

Обычно, когда движок PHP сталкивается с проблемой, препятствующей правильной работе скрипта, он генерирует сообщение об ошибке. Существует шестнадцать различных уровней ошибок, и каждый уровень представлен целым числом и связанной с ним константой. Вот список уровней ошибок: Название Значение Описание E_ERROR 1 Неустранимая ошибка времени выполнения от которой невозможно избавиться. Выполнение скрипта немедленно прекращается E_WARNING 2…

Разработка сайтов для бизнеса

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

Источник

PHP5 Проверка форм

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

PHP Проверка форм

Подумайте о безопасности при обработке PHP форм!

На этой странице Вы увидете, как обрабатывать PHP формы с учетом безопасности. Правильная проверка данных формы важна чтобы защитить форму от хакеров и спамеров!

Форма HTML, в которой Вы будем работать в этой главе, содержит различные поля ввода: обязательные и дополнительные текстовые поля, радио-кнопки, кнопку отправки:

Правила проверки для приведенной выше формы следующие:

Поле Правило проверки
Имя Обязательно. + Должно содержать только буквы и пробелы
E-mail Обязательно. + Должно содержать действительный адрес электронной почты (с @ и .)
Вебсайт Произвольно. Если оно присутствует, оно должно содержать допустимый URL адрес
Комментарий Произвольно. Многострочное поле ввода (textarea)
Пол Обязательно. + Необходимо выбрать один из

Сначала рассмотрим простой HTML код для формы:

Поля ввода

Поля — Имя, E-mail, Вебсайт, являются элементами ввода текста, а Комментарий полем-текстового ввода. HTML код выглядит так:

Радио кнопки

Поля Пол, радио-кнопки. HTML код выглядит так:

PHP Элементы формы

HTML код выглядит следующим образом:

При отправке формы, данные формы отправляются с method=»post» .

Что такое $_SERVER[«PHP_SELF»]?

$_SERVER[«PHP_SELF»] суперглобальная переменная, которая возвращает имя текущего выполняемого скрипта.

Итак, переменная $_SERVER[«PHP_SELF»] отправляет отправленные данные формы на данную страницу вместо перехода на другую страницу. Таким образом, пользователь будет получать сообщения об ошибках на той же странице, что и форма.

Что такое htmlspecialchars()?

Функция htmlspecialchars() преобразующая специальные символы в HTML сущность. Это означает, что он заменит HTML символы, такие как < и >на < и > . Это предотвращает использование кода злоумышленниками путем ввода кода HTML или Javascript (Межсайтовые Скриптовые атаки) в формах.

PHP Предупреждение о безопасности формы

Переменная $_SERVER[«PHP_SELF»] может использоваться хакерами!

Если PHP_SELF используется на вашей странице, то пользователь может ввести косую черту / и некоторые Межсайтовые скрипты XSS команды для выполнения.

Cross-site scripting (XSS), тип уязвимости компьютерной безопасности обычно встречается в веб-приложениях. XSS позволяет злоумышленникам внедрить клиентскую часть скрипт на веб страницы, просмотренные другими пользователями.

Предположим, у нас есть следующая форма на странице с именем «test_form.php»:

Теперь, если пользователь введет нормальный URL-адрес в адресной строке, как «http://www.example.com/test_form.php», приведенный выше код будет переведен на:

Однако, считаю, что пользователь введет следующий URL в адресной строке:

В этом случае приведенный выше код будет переведен на:

Этот код добавляет тег скрипта и команду оповещения. И когда страница загружается, будет выполнен код JavaScript (пользователь увидит окно предупреждения). Это просто и безобидный пример того, как переменная PHP_SELF может быть использован.

Помните об этом любой код JavaScript может быть добавлен внутри тега ! Хакер может перенаправить пользователя в файл на другом сервере, и этот файл может содержать вредоносный код это может изменить глобальные переменные или передать форму адреса другому для сохранения пользовательских данных, например.

Как избежать злоупотребление $_SERVER[«PHP_SELF»] ?

Злоупотребление $_SERVER[«PHP_SELF»] , можно избежать с помощью функции htmlspecialchars() .

Код формы должен выглядеть следующим образом:

Функция htmlspecialchars() , преобразует специальные символы в HTML сущности. Теперь, если пользователь пытается использовать эту переменную, это выльется в следующие вывод:

Попытка злоупотребление терпит неудачу, и никакого вреда не будет!

PHP Проверка данных формы

Первое, что мы сделаем, это передадим все переменные PHP функции htmlspecialchars() .

Когда используется функция htmlspecialchars(); затем, если пользователь пытается отправить следующее текстовое поле:

— не будет выполняться, потому что она будет сохранена как сбежавший HTML код, как это:

Код теперь безопасен для отображения на странице и внутри e-mail.

Мы также сделаем еще две вещи, когда пользователь отправляет форму:

  1. Прокладка ненужных символов (лишний пробел, табуляции, символы новой строки) ввод данных пользователя с отделкой функции PHP()
  2. Удаление обратной косой черты \ ввод данных пользователя с PHP функцией stripslashes()

Следующим шагом является создание функции, которая будет делать все проверки для нас (гораздо удобнее, чем писать один и тот же код снова и снова).

Мы назовем функцию test_input() .

Теперь мы можем проверить каждую переменную $_POST с функцией test_input() , и скрипт будет выглядеть так:

Пример

// Определить переменные и установить в пустые значения
$name = $email = $gender = $comment = $website = «»;
if ($_SERVER[«REQUEST_METHOD»] == «POST») $name = test_input($_POST[«name»]);
$email = test_input($_POST[«email»]);
$website = test_input($_POST[«website»]);
$comment = test_input($_POST[«comment»]);
$gender = test_input($_POST[«gender»]);
>

function test_input($data) $data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
>
?>

Обратите внимание, что в начале сценария мы проверяем, была ли форма представленный используя $_SERVER[«REQUEST_METHOD»] . Если REQUEST_METHOD являться POST, затем форма будет отправлена и она должна быть подтверждена. Если он не была отправленна, пропустите проверку и отобразите пустую форму.

Однако в приведенном выше примере все поля ввода являются необязательными. Скрипт должен отлично работать, даже если пользователь не вводит никаких данных.

Следующий шаг состоит в том, чтобы сделать поля ввода обязательными и создать сообщения об ошибках, если необходимо.

Источник

Оцените статью