[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PHP класс для рисования HTML форм
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
dr.nomore
Тему просмотрел бегло. Как и ожидалось расследование пошло по пути предложенном подозреваемым в написании сугубого кода.

Вполне очевидно что данные из валидола поступят в БД. Стало быть не менее очевидно что они там уже есть и надо только их взять и применить. Чтобы долго не играть эту забитую пластинку открою великий секрет полишинеля немедленно. Сравните:

protected $text_error = array(
'notempty' => 'Поле не может быть пустым',
'length' => 'Поле содержит неверное кол-во символов',
'email' => 'Поле заполнено не корректно',
'regexp' => 'Поле заполнено не корректно',
'code' => 'Введён не правильный защитный код',
'confirm'=> 'Введённые пароли не совпадают',
'id'=>'Поле заполнено не верно, ожидаются только цифры'
);


и



MYSQLI_BINARY_FLAG Field is defined as BINARY. Available since PHP 5.3.0.
MYSQLI_ENUM_FLAG Field is defined as ENUM. Available since PHP 5.3.0.
MYSQLI_NOT_NULL_FLAG Indicates that a field is defined as NOT NULL
MYSQLI_PRI_KEY_FLAG Field is part of a primary index
MYSQLI_UNIQUE_KEY_FLAG Field is part of a unique index.
MYSQLI_MULTIPLE_KEY_FLAG Field is part of an index.
MYSQLI_BLOB_FLAG Field is defined as BLOB
MYSQLI_UNSIGNED_FLAG Field is defined as UNSIGNED
MYSQLI_ZEROFILL_FLAG Field is defined as ZEROFILL
MYSQLI_AUTO_INCREMENT_FLAG Field is defined as AUTO_INCREMENT
MYSQLI_TIMESTAMP_FLAG Field is defined as TIMESTAMP
MYSQLI_SET_FLAG Field is defined as SET
MYSQLI_NUM_FLAG Field is defined as NUMERIC 32768
MYSQLI_PART_KEY_FLAG Field is part of an multi-index
MYSQLI_GROUP_FLAG Field is part of GROUP BY


А кроме флагов еще есть с дюжину типов данных поля, кроме типов есть длина поля в байтах, длина поля в символах, длина поля в циферках, в общем обширная куча инфы которую никакого труда не составляет пополнить одним дополнительным запросом к основному до, в процессе или после разбора его результата. И самая мякотка в том что все это богатство возвращается stdClass в который можете добавлять что угодно кроме методов.

Технически делается тоже просто. На событие потери фокуса вешается функция валидации которая получает правила из имени элемента в котором находятся все эти флаги и типы. Например поле Наименование из таблицы Товары: name ="Товары[Наименование][1][253]";

В ява-скрипте нарисован точно такой же набор "констант"

var MYSQLI = {
'NOT_NULL_FLAG': 1,
'PRI_KEY_FLAG': 2,
'UNIQUE_KEY_FLAG': 4,
'MULTIPLE_KEY_FLAG': 8,
'BLOB_FLAG': 16,
'UNSIGNED_FLAG': 32,
'ZEROFILL_FLAG': 64,
'BINARY_FLAG': 128,
'ENUM_FLAG': 256,
'AUTO_INCREMENT_FLAG': 512,
'TIMESTAMP_FLAG': 1024,
'SET_FLAG': 2048,
'PART_KEY_FLAG': 16384,
'GROUP_FLAG': 32768,
'NUM_FLAG': 32768,
'UNIQUE_FLAG': 65536
};


и про типы js знает. Стало быть если по событию потери фокуса единственная на все поля функция валидации обнаружила что this.value.trim().length < 1 при совпадении условий (flags & 1) & !(flags & 1024) & !(flags & 2) - не нуль но первичный, но таймштамп - она выкатывает гневный алерт "Поле " + $name + " не может оставаться пустым" и не зажигает кнопку Submit.

Теперь уже сами понимаете как легко пробежаться в переключателе (switch) по типу поля и, например сообщить юзеру что он тупой, потому что в плейсхлдере был нарисован паттерн из цифр (по тому же сценарию в точности наоборот php генерит placeholder's), а юзер вписал буквы: "Нельзя вводить буквы в поле для чисел."

Короче учите мать-часть. :)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.