 
Проверка публичных записей
Если не производить проверку данных, вводимых посетителями, сайт может быстро превратиться в свалку.
Для проверки публичных записей используются обработчики обновления. Приведем пример, в котором посетители вводят логин и электронный адрес.
Шаблон (formValidation.tpl)
<?php
foreach ($tab as $dat)
echo "
{$dat['edit']}
$dat[1]
$dat[2]<br>
";
echo "
<form action='?update&block={$block}&rec=new' method='post'>
login
<input type='text' name='dat[1]' value='$udat[1]'>
<input type='hidden' name='validate[1]' value='login'>";
if ($udat['notValid'][1])
echo "
Логин должен начинаться с буквы или цифры.
От 4 до 32 знаков.
";
echo "
<br>
email
<input type='text' name='dat[2]' value='$udat[2]'>
<input type='hidden' name='validate[2]' value='email'> ";
if ($udat['notValid'][2])
echo "Неправильный электронный адрес";
echo "
<br>
<input type='submit' value='Сохранить'>
</form>
";
?>
Данные отправляются на сервер одномерным массивом dat[]. Кроме этого, нужно передать информацию о способе, которым будет проверяться данное с каждого поля.
Эту информацию будем передавать с помощью скрытых полей формы (см. массив validate[]). Способы проверки в нашем примере будут называться login и email. Информация о том, что введенное данное не является правильным, после проверки в обработчике будет возвращаться на шаблон массивом $udat['notValid'][]
Дескриптор шаблона (formValidation.tdd)
<?php
$types[1] = 'varchar(32)';
$types[2] = 'varchar(32)';
$params['public'] = array();
$params['isMultiRec'] = true;
?>
Обработчик (formValidation.uh)
<?php
if (!empty($_POST))
{
# Сохранить временно, чтобы вернуть обратно на форму
$dat[1] = $_POST['dat'][1];
$dat[2] = $_POST['dat'][2];
# Если данное 1 не верно
if (!isValid($dat[1], $_POST['validate'][1]))
$udat['notValid'][1] = true;
# Если данное 2 не верно
if (!isValid($dat[2], $_POST['validate'][2]))
$udat['notValid'][2] =true;
# Если хотя бы одно данное не верно
if (isset($udat['notValid']))
{
$udat['unsave'] = true;# Чтобы данные не были записаны в этот блок
# Передать данные обратно на шаблон
# чтобы заново их вводить
$udat[1] = $dat[1];
$udat[2] = $dat[2];
}
}
function isValid($input, $type)
{
switch ($type)
{
case 'email':
$regex="/^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/";
break;
case 'login':
$regex="/^([a-zA-Z0-9\s]{4,32})$/";
break;
}
if (preg_match($regex, $input))
return true;
}
?>
Для проверки валидности данных применяются регулярные выражения, которые вынесены в отдельную функцию isValid(). Эту функцию можно постоянно расширять для проверки данных различного типа: паролей, чисел, имен файлов и т.д. Для этого нужно добавлять новые секции case с соответствующими регулярными выражениями. Если вы незнакомы с регулярными выражениями, то можете воспользоваться библиотеками, например: regexlib.com, в которых можно найти готовые решения.
Если какие-то из данных не приняты, то все они, в том числе неправильные, возвращаются обратно в форму в элементах массива $udat[1] и $udat[2]. C помощью переменных $udat['notValid'][] на шаблон передается информация о том, какие из данных неправильны.
|