Проверка входящих данных.

tt

Новичок
Проверка входящих данных.

Пишется в проекте базовая функциональность, для проверки входящих данных предлагается использовать xml, или другой формат конфига,
с помощью, которого описывать все варианты допустимых входящих данных. Конечно, проверка данных будет выполняться прозрачно, то есть программист, просто описывает формат входящих данных. Приложение, написано используя паттерн MVC. Пример предполагаемой проверки данных, проверяется контролер, который выводит определенную тему с форума:


<Данные>
<Номер Темы в Форуме>
<тип данных>целое число</тип данных>
<обязательный параметр>да</обязательный параметр>
<проверка прав пользователя></проверка прав пользователя>
<проверка наличия темы>Некий класс, который выполняет проверку </проверка наличия темы>
<При получения ошибок, во время проверки>
< проверка прав пользователя>
<редирект>Урл страницы для входа в форум</ редирект>

</ проверка прав пользователя>
</ При получения ошибок, во время проверки>
</Номер Темы в Форуме>
</Данные>


Русские названия тегов приведены только для примера.

Идея в том чтоб убрать с приложения многочисленные if и тому подобные конструкции, плюс быть уверенным что данные которыми оперирует приложение, уже прошли проверку.

Хотелось бы услышать Ваше мнение, плюс, возможно, кто-то писал что-то похожее, и подскажет какие грабли ожидают при таком подходе.
Насколько такой подход, будет правильным с учетом того что не хочется
чтоб это как то затрудняло жизнь при разработке,
возможно, лучим вариантом будет не создания конфигов, для проверки,
а создания некого класса, который будет расширять базовый валидатор для каждого конкретного случая проверки.
 

Духовность™

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

-~{}~ 12.11.07 11:31:

Я имею в виду, как xml описывающей эту проверку должен выглядеть?
 

tt

Новичок
triumvirat
Если данные поступают через веб форму, то планируется использовать подход, HTML_MetaForm. http://www.rit2007.ru/paper_view.html?id=998

Плюс в файле конфига указать что данные проверяются классом, который оперирует библиотекой описанной выше.
 

Фанат

oncle terrible
Команда форума
я думаю, именно за этим товарищ и обратилсо.

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

вообще, имхо, неплохая идея.
из тех, ради которых хмл и задумывался.

но, на самом деле, надо не на форум идти, а начинать делать.
надо из реальных задач информацию извлекать, а не из пальца на форуме.


как-то так
<email>
<maxlen>
<max>
<value>30</value>
<msg>слишком длинное мыло</msg>
</max>
</length>
<regexp>
<value>/\w@\w\.[a-z]{2,5}/</value>//для примеру
<msg>неверный формат мейла</msg>
</regexp>
</email>

<name>

тьфу. уже 10 раз все исправлял и плюнул.
на практике надо отлаживать.
к примеру, если у нас есть фиксированные параметры, то и сообщения об ошибках тоже можно зхаранее прописать - к примеру о длине. у параметра maxlеn стандартное сообщение, прописанное где-то в другом месте, выглядит как "Длина поля valueof(param) не может превышать valueof(value)"
поэтому лучше без катомных обойтись вовсе.
и для регэкспа забить что-то вроде "введенная информация имеет неверый формат". хотя, наверное, без кастома не обойтись.
в общем, реальная исплатация будет в сто раз полезнее сидения на форуме.
 

tt

Новичок
Пример валидатор гостевой.

<данные>
<Валидатор Форм>Имя класса если он будет не один</Виладтор Форм>
</данные>


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

Фанат

oncle terrible
Команда форума
tt
этот твой последний пример выглядит, как подачка.
которую кидают - лишь бы отвязались.
 

tt

Новичок
фанат,

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

Фанат

oncle terrible
Команда форума
не понял.
а нафига тогда вообще этот хмл сдался?
библиотеку не смотрел, но если ты собрался прописывать проверки в шаблоне, то нафига что-то писать ещё где-то?
ты сам-то вообще помнишь, что пишешь?
сначала что
Идея в том чтоб убрать с приложения многочисленные if
а теперь -
все параметры зашиваються в шаблоны вида
так чтего ты, в конце-концов, хочешь?
 

tt

Новичок
*****
Хотя по идеи можно и использовать полный конфиг, чтоб держать данные для проверки в одном месте, в системе.
вот так будет выглядеть пример для гостевой:


имя, мейл, сообщение?
<данные>

<общие параметры>
<Все поля должны быть заполнены>Да</Все поля должны быть заполнены>
<Проверка прав пользователя на данное действие>Да<Проверка прав пользователя на данное действие>
И другие общие параметры, такие как куда сделать редирект, или другое действие в случай ошибки, и так дальше, также каждое поле может перекрыть общие настройки с данного раздела, пример поле Имя
</общие параметры>


<имя>
<Поле должно быть заполненным>Нет</ Поле должно быть заполненным >
<тип данных>строка</тип данных>
<Валидаторы>
<Класс для проверки длины>
<параметры>
<минимальная длина>3</минимальная длина>
< максимальна длина >20</максимальна длина>
</параметры>
</Класс для проверки длины>
</Валидаторы>
<Фильтра>
<Фильтр который уберет все html теги>Названия фильтра</Фильтр который уберет все html теги>
</Фильтра>
</имя>


<мейл>
<тип данных>строка</тип данных>
<Валидаторы>
<Класс для проверки длины>
<параметры>
<минимальная длина>7</минимальная длина>
< максимальна длина >50</максимальна длина>
</параметры>
</Класс для проверки длины>
<Класс проверки корректности мейл>Параметры если нужны….<Класс проверки корректности мейл>

</Валидаторы>
<Фильтра>
<Фильтр приводящий строку в нижний регистр></Фильтр приводящий строку в нижний регистр>
</Фильтра>
</мейл>


<сообщение>
<тип данных>строка</тип данных>
<Валидаторы>
<Класс для проверки длины>
<параметры>
<минимальная длина>20</минимальная длина>
< максимальна длина >500</максимальна длина>
</параметры>
</Класс для проверки длины>
</Валидаторы>
<Фильтра>
<Фильтр который уберет все html теги>Названия фильтра</Фильтр который уберет все html теги>
</Фильтра>
</сообщение>

</данные>



-~{}~ 12.11.07 12:26:

И еще возможно использовать другой формат не xml, так как не все символы можно вносить в значения, не которые нужно превращать в html сущности.
 

Фанат

oncle terrible
Команда форума
фигня какая-то. по классу на параметр? зачем?
почему все проверки не может делать один класс?
нафига тебе однообразные классы в одну строчку?
если все различия в обработке и так прописаны в хмл?

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

tt

Новичок
а нафига тогда вообще этот хмл сдался?
библиотеку не смотрел, но если ты собрался прописывать проверки в шаблоне, то нафига что-то писать ещё где-то?
Данная библиотека облегчает жизнь тем что нам не нужно будет писать правил проверки на такие поля, как поля select, checkbox, hidden,
она их подписывает цифровой подписю, но данная библиотека не может проверить значения полей, если их значения изменяются - задаются с помощью js.
Вот для таких проверок и нужен xml, плюс не все данные в веб приложения приходят с веб форм, теже get параметры, параметры которые получаем с строки урла: /forum/message/id/100/, и так дальше, для них ведь также нужно делать проверки, и мы их и делаем но через if и так дальше.

-~{}~ 12.11.07 12:40:

фигня какая-то. по классу на параметр? зачем?
почему все проверки не может делать один класс?
нафига тебе однообразные классы в одну строчку?
если все различия в обработке и так прописаны в хмл?
Класс например для проверки длинны всегда один, а параметры это минимальная и масмальная длина строки.

Почему не в одном классе? только потому что нет смысла писать супер класс со всями видами проверок, плюс если нужно сделать новый тип проверок мы создаем новый класс в отдельном файле, и все его можно использовать.

хм я обьяснил выше зачем я пишу сдесь:

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

-~{}~ 12.11.07 12:45:

Стоп дошло ко мне ты не правильно понял.
<Имя класса для проверки длинны>
<параметры которые передаются в конструктор данного класса>
<параметр>7</параметр>
<параметр >50</параметр>
</параметры которые передаются в конструктор данного класса>
</Имя класса для проверки длинны>

Или я не так обьяснил, параметры будут переданы в конструктор в том порядке в котром указаны.
 

Фанат

oncle terrible
Команда форума
мля.
при чем здесь тогда вообще эта библиотека?

и что вообще за дурацкая идея с цифровой подписью? какой мозговой паразит такое придумал?
нафига гонять с сервера клиенту и обратно подпись того, что и так на сервере имеется?
но это ладно. оффтопик.
значит, если эта дурная библиотека тут не при чем, то И НЕ УПОМИНАЙ ЕЁ ВОВСЕ!

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

подумай - можем ли мы формализовать все проверки?
если можем, то просто описываем их вместе с сообщениями об ошибках в одном месте.
осюда очень нежелательно ветвление конфига. никаких length max
a maxlen minlen

-~{}~ 12.11.07 12:57:

если нужно сделать новый тип проверок мы создаем новый класс в отдельном файле, и все его можно использовать.
ню-ню.
я пошел отсюда.
 

cDLEON

Онанист РНРСlub
*****
На сколько я понял, цифровая подпись используется для контроля, что форма отсылалась именно с его сайта.
Аля "прикольный топег в теории программирования".
но данная библиотека не может проверить значения полей, если их значения изменяются - задаются с помощью js.
Не понял. Что вы этим сказать хотите?
 

texrdcom

Новичок
cDLEON
Вы не правильно поняли, я давал ссылку на библиотеку, плюс она была представлена на phpconf2007 в сети есть видео доклад создателя.
 

cDLEON

Онанист РНРСlub
texrdcom
Вы мне в крадце объясните зачем такая подпись нужна.
 
Сверху