Проверка публичных записей

Если не производить проверку данных, вводимых посетителями, сайт может быстро превратиться в свалку. Для проверки публичных записей используются предобработчики обновления данных. Приведем пример, в котором посетители вводят логин и почтовый ящик.

Шаблон (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'][] на шаблон передается информация о том, какие из данных неправильны.