Если не производить проверку данных, вводимых посетителями, сайт может быстро превратиться в свалку. Для проверки публичных записей используются предобработчики обновления данных. Приведем пример, в котором посетители вводят логин и почтовый ящик.
Шаблон (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['not-valid'][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['not-valid'][2]) echo "Неправильный почтовый ящик"; echo " <br> <input type='submit' value='Сохранить'> </form> "; ?>
Данные отправляются на сервер одномерным массивом dat[]. Кроме этого, нужно передать информацию о способе, которым будет проверяться данное с каждого поля. Эту информацию будем передавать с помощью скрытых полей формы (см. массив validate[]). Способы проверки в нашем примере будут называться login и email. Информация о том, что введенное данное не является правильным, после проверки в предобработчике будет возвращаться на шаблон массивом $udat['not-valid'][]
Дескриптор шаблона (formValidation.tdd)
<?php
$types[1] = 'varchar(32)';
$types[2] = 'varchar(32)';
$params['public'] = [];
$params['multi-record'] = true;
?>
Предобработчик (formValidation.tuh)
<?php
if ($_POST)
{
# Сохранить временно, чтобы вернуть обратно на форму
$dat[1] = $_POST['dat'][1];
$dat[2] = $_POST['dat'][2];
# Если данное 1 не верно
if (!Str::isValid($dat[1], $_POST['validate'][1]))
$udat['not-valid'][1] = true;
# Если данное 2 не верно
if (!Str::isValid($dat[2], $_POST['validate'][2]))
$udat['not-valid'][2] =true;
# Если хотя бы одно данное не верно
if (isset($udat['not-valid']))
{
$udat['unsave'] = true;# Чтобы данные не были записаны в этот блок
# Передать данные обратно на шаблон
# чтобы заново их вводить
$udat[1] = $dat[1];
$udat[2] = $dat[2];
}
}
?>
Для проверки валидности данных применяется метод Str::isValid().
Если какие-то из данных не приняты, то все они, в том числе неправильные, возвращаются обратно в форму в элементах массива $udat[1] и $udat[2]. C помощью переменных $udat['not-valid'][] на шаблон передается информация о том, какие из данных неправильны.