www.linedmk.com - компас в сайтостроительстве!
www.linedmk.com - создать сайт

Получение, проверка и обработка данных на PHP

Данные переданные HTML-формой в PHP будут размещены в массивах $_GET, $_POST, $_REQUEST (подробнее PHP и методы передачи данных GET и POST). Форму будет заполнять пользователь, и не известно, что он может ввести в поля формы. Может пропустить одно или несколько полей, введет некорректные данные, например, нужно будет ввести число, а пользователь введет какой-нибудь текст. К получаемым данным нужно очень осторожно относиться, особенно, если информация сохраняется в базе данных, используется для работы с файловой системой, а так же отображается пользователям сайта (например, пользователь может отправить вредоносный скрипт, написанный на javascript, который в дальнейшем может быть загружен в браузер другого посетителя сайта и нанести вред его компьютеру). Для проверки и обработки данных в PHP есть специальные функции. Ознакомимся с ними.

Функция isset($имя_переменной) возвращает true, если переменная объявлена даже без присваивания значения. Пример использования

Код
if (isset($_GET["number"]))
{
//Переменная существует, выполняем нужные действия с ней
...
}
else
{
//Переменная не существует, поэтому выполнять действия с ней нельзя. Можно вывести предупреждение пользователю
echo ("Не указано значение number!");
...
}

Функция empty($имя_переменной) возвращает true, если значение переменной равно нулю или пустой строке либо переменная не объявлена. Пример использования функции
Код
if (empty($_POST["code"]))
{
//переменная не объявлена или ее значение равно нулю, сообщим об этом пользователю
echo ("Не указано значение поля Code!");
}
else
{
//переменная существует и ее значение не равно нулю
...
}
После проверки переменной на существование и ее значения можно проверить тип содержащегося в ней значения. Следующие функции проверяют тип переменной, и если переменная соответствует проверяемому типу, то функция возвращает true:
  • is_int($имя_переменной) - проверяет, является ли переменная целым числом (тип integer);
  • is_array($имя_переменной) - проверяет, является ли переменная массивом;
  • is_float($имя_переменной) - проверяет, является ли переменная числом с плавающей точкой;
  • is_null($имя_переменной) - проверяет, равно ли значение переменной нулю;
  • is_numeric($имя_переменной) - проверяет, является ли переменная числовой строкой;
  • is_string($имя_переменной) - проверяет, является ли переменная строкой (текстовой).
Полученные данные при необходимости можно и обработать: либо при сохранении в базе данных, либо при сохранении в файле, либо при выводе в браузер. Обработка заключается в вырезании каких-либо символов, или их замене.
Функция strip_tags() позволяет удалить из текста все дескрипторы (теги), но можно указать какие из них следует оставить. Так для удаления всех тегов нужно записать
Код
$text=strip_tags($text);
Если нужно какие-то теги оставить, то их нужно указать вторым параметром
Код
$text=strip_tags($text,"<a><b>");//оставим в тексте теги A и B.
Перед выводом в окно браузера можно данные преобразовать функцией htmlspecialchars(). Эта функция преобразует некоторые специальные HTML-символы в другой формат. При этом браузер будет отображать эти преобразованные символы уже без учета их специального назначения. Так, например, преобразования будут происходить следующим образом:
  • символ < - преобразуется в "&lt;"
  • символ > - преобразуется в "&gt;"
  • символ амперсанд (&) - преобразуется в "&amp;"
Так же есть возможность указать, как обрабатывать одинарные и двойные кавычки. Для этого надо в качестве второго аргумента указать одну из следующих констант
  • ENT_COMPAT - функция преобразует двойные кавычки, одинарные кавычки не будут преобразованы;
  • ENT_QUOTES - функция преобразует и двойные и одинарные кавычки;
  • ENT_NOQUOTES - функция не будет преобразовывать ни одинарные ни двойные кавычки.
Если в функции htmlspecialchars() не будет указан второй аргумент, то по умолчанию будет использоваться режим ENT_COMPAT.
Например
Код
$text=htmlspecialchars($text);
$text=htmlspecialchars($text,ENT_QUOTES);
Функция addslashes() экранирует строку обратными слэшами. Эту функцию нужно использовать при использовании данных при запросах к базе данных и тому подобных случаях. Эта функция возвращает строку с обратными слэшами перед символами: одинарная кавычка ('), двойная кавычка ("), обратный слэш (). Например
Код
$text=addslashes($text);
Для удаления экранирующих обратных слэшей нужно использовать функцию stripslashes (). Эта функция удалит экранирующие обратные слэши (например, "текст и текст" преобразуется в "текст и текст"), двойные обратные слэши станут одинарными.
Код
$text=stripslashes ($text);

Очень часто пользователи в начале или в конце строки случайно вводят пробелы. Эти пробелы практически не нужны, и поэтому их можно удалить. Удалить эти пробелы поможет функция trim(). Например
Код
$text=trim($text);

Еще одна не маловажная деталь при получении данных от пользователя: это информирование пользователя о допущении ошибки при заполнении одной или нескольких полей формы. Причем нужно отобразить форму с теми данными, которые он ввел. Представьте, что на сайте пользователю нужно заполнить какую-либо форму, в которой несколько полей, например, 10. И если пользователь случайно не заполнит одно поле или заполнит его не корректно, и после отправки формы отобразится пустая форма с сообщением об ошибке, то ему придется заново заполнять всю форму, а не исправить лишь какую-то часть данных. В этом случае есть большая вероятность, что пользователь покинет сайт, сочтя его крайне не доброжелательным к пользователям, заставляя тратить лишнее время и усилия для предоставления информации.
Для примера реализации проверки и обработки данных напишем небольшой скрипт text.php, который будет получать от пользователя некоторую информацию и обрабатывать ее.

Код
<html>
<head>
<title>Получение, проверка и обработка данных на PHP</title>
</head>
<body>

<?php

$t="";
$nic="";
$num="";

$error=false;
$on_submit=false;
$pol="";

$pol_m="";
$pol_j="";
$pol_x="";
$mas_pol=array ("m"=>"мужской","j"=>"женский","x"=>"еще не поняло");
$selected=" selected='selected' ";

$coment="";

if (!empty($_POST["onsubmit"]))
{
//форма была отправлена, проверим данные
$on_submit=true;
if (empty($_POST["nic"]))
{
$t.="<div>Вы не указали свое имя или ник!</div>";
$error=true;
}
else
$nic=$_POST["nic"];
if (empty($_POST["number"]))
{
$t.="<div>Вы не указали свой возраст!</div>";
$error=true;
}
else
{
$num=$_POST["number"];
if (!is_numeric($num))
{
$t.="<div>Возраст нужно написать цифрами!</div>";
$error=true;
}

}
if (empty($_POST["pol"]) || $_POST["pol"]=="none")
{
$t.="<div>Укажите свой пол!</div>";
$error=true;
}
else
{
$pol=$_POST["pol"];
switch ($pol)
{
case ("m"):$pol_m=$selected;break;
case ("j"):$pol_j=$selected;break;
case ("x"):$pol_x=$selected;break;
}
}
if (empty($_POST["coment"]))
{
$t.="<div>Вы не написали комментарий!</div>";
$error=true;
}
else
$coment=$_POST["coment"];
}

if ($on_submit && !$error)
{
//если форма была отправлена и ошибок при заполнении нет, то отображаем поученные данные
$t.="Получены следующие данные<br/>Ваше имя: ".htmlspecialchars($nic,ENT_QUOTES);
$t.="<br/>Ваш возраст: ".htmlspecialchars($num,ENT_QUOTES);
$t.="<br/>Ваш пол: ".$mas_pol[$pol];
$t.="<br/>Комментарий: ".htmlspecialchars($coment,ENT_QUOTES);
}
else
{
//если форма не отправлялась или была отправлена, но при заполнении полей были допущены ошибки, то выводим форму
//причем, если форма была отправлена (с некорректным заполнением полей), то выводим ее с теми данными, которые ввел пользователь
$t.="<form action='text.php' method='post'>

Ваше имя или ник<br/>
<input type='text' name='nic' value='".htmlspecialchars($nic,ENT_QUOTES)."'><br/>
Сколько вам лет (цифрами)<br/>
<input type='text' name='number' value='".htmlspecialchars($num,ENT_QUOTES)."'>
<br/>
Ваш пол<br/>
<select name='pol'>
<option value='none'>выберите...</option>
<option value='m' ".$pol_m.">мужской</option>
<option value='j' ".$pol_j.">женский</option>
<option value='x' ".$pol_x.">еще не поняло</option>
</select>
<br/>
Напишите комментарий<br/>
<textarea name='coment'>".htmlspecialchars($coment,ENT_QUOTES)."</textarea>
<br/>
<input type='submit' value='Отправить'>
<input type='hidden' name='onsubmit' value='on'>
</form>
";
}
echo ($t);

?>

</body>
</html>

При правильном заполнении формы, данные будут отображены в браузере без HTML-формы. Если же форма будет заполнена некорректно, то будет выведено соответствующее сообщение об ошибке.
Опубликованно: 15 июня 2009 г.
Теги: php, основы php
Комментарии к статье
Всего комментариев: 6
прохожий: Гость | 15.02.2010, 13:01 #
Прикольно работает.. главное понятно! особенно прикол с выбором пола понравился)))))
Надо было еще поставить "крашенный"
прохожий: David | 18.02.2010, 14:48 #
otlichnaya statya dolgo v neter iskal
прохожий: Ri | 01.03.2010, 19:52 #
E-mail: terr@mail.ru
В какую папку записываются данные пользователя с формы text.php ?
Суперадмин: | 09.03.2010, 22:52 #
Данные формы никуда не копируются, а просто выводятся на сайте пользователю. Попробуйте, сами сохранить их в файл! :)
прохожий: Ri | 01.03.2010, 20:31 #
E-mail: terr@mail.ru
а как добавить капчу в скрипт формы text.php ?
Суперадмин: | 09.03.2010, 22:53 #
Это вопрос отдельной статьи.
Вход в аккаунт
Новости сайта
Помощь сайту
Платежные реквизиты для помощи сайту доступны на странице помощь проекту