- Руководство по валидации форм в PHP
- Похожие посты
- Руководство по загрузке файлов на сервер в PHP
- Руководство по GET и POST запросам в PHP
- Список сообщений об ошибках в PHP
- PHP5 Проверка форм
- PHP Проверка форм
- Поля ввода
- Радио кнопки
- PHP Элементы формы
- PHP Предупреждение о безопасности формы
- Как избежать злоупотребление $_SERVER[«PHP_SELF»] ?
- PHP Проверка данных формы
- Пример
Руководство по валидации форм в PHP
Как мы узнали в предыдущем руководстве, процесс сбора и отображения отправленных данных формы довольно прост. В этом руководстве вы узнаете, как реализовать на своем веб-сайте простую контактную форму, которая позволяет пользователям отправлять свои комментарии и отзывы по электронной почте. Мы будем использовать ту же PHP-функцию mail() для отправки писем.
Мы также собираемся реализовать некоторые базовые функции безопасности, такие как санитизация и валидация полей, чтобы пользователь не мог вставлять потенциально опасные данные, которые ставят под угрозу безопасность веб-сайта или могут нарушить работу приложения.
Ниже приводится наш универсальный PHP-скрипт, который выполняет следующие функции:
- Он попросит пользователя ввести свой комментарий о веб-сайте.
- Тот же скрипт отображает контактную форму и обрабатывает отправленные данные формы.
- Скрипт очищает и проверяет вводимые пользователем данные. Если какое-либо обязательное поле (отмеченное *) отсутствует или проверка не удалась из-за неправильных данных, скрипт повторно отображает форму с сообщением об ошибке для соответствующего поля формы.
- Скрипт запоминает, какие поля пользователь уже заполнил, и предварительно заполняет эти поля, когда форма повторно отображается из-за ошибки проверки.
- Если данные, представленные пользователем, приемлемы, и все идет хорошо, он отправит электронное письмо администратору веб-сайта и отобразит сообщение об успехе пользователю.
Введите следующий код в файл contact.php и сохраните его в корневом каталоге проекта:
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 ) своим собственным кодом.
Насколько публикация полезна?
Нажмите на звезду, чтобы оценить!
Средняя оценка 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, в которой Вы будем работать в этой главе, содержит различные поля ввода: обязательные и дополнительные текстовые поля, радио-кнопки, кнопку отправки:
Правила проверки для приведенной выше формы следующие:
Поле | Правило проверки |
---|---|
Имя | Обязательно. + Должно содержать только буквы и пробелы |
Обязательно. + Должно содержать действительный адрес электронной почты (с @ и .) | |
Вебсайт | Произвольно. Если оно присутствует, оно должно содержать допустимый 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.
Мы также сделаем еще две вещи, когда пользователь отправляет форму:
- Прокладка ненужных символов (лишний пробел, табуляции, символы новой строки) ввод данных пользователя с отделкой функции PHP()
- Удаление обратной косой черты \ ввод данных пользователя с 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»]);
>
?php
function test_input($data) $data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
>
?>
Обратите внимание, что в начале сценария мы проверяем, была ли форма представленный используя $_SERVER[«REQUEST_METHOD»] . Если REQUEST_METHOD являться POST, затем форма будет отправлена и она должна быть подтверждена. Если он не была отправленна, пропустите проверку и отобразите пустую форму.
Однако в приведенном выше примере все поля ввода являются необязательными. Скрипт должен отлично работать, даже если пользователь не вводит никаких данных.
Следующий шаг состоит в том, чтобы сделать поля ввода обязательными и создать сообщения об ошибках, если необходимо.