16.08.2016, 14:59
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Такие вещи все равно делаются через БД. Почта теряется, залипает в спаме, ходит как попало. А когда есть БД, то основную часть данных о полях можно получить прямо из свойств полей таблицы, здесь таблицы отзывов. Например если поле name not null и нет никакого default, то значит в форме оно будет reuired, а если есть default, то сразу пишем в value этого поля в форме, что в default внесено на этапе создания таблицы. Еще можно вычислять maxlength для текстовых полей. Для полей под числа можно узнать тип числа и допустимое количество знаков за запятой. Дофига чего в общем. Затем в эти же данные просто добавляются паттерны и по обстоятельствам дополнительные свойства и готов объект для рендера формы и для валидации одновременно.
|
|
16.08.2016, 15:01
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Сообщение от laimas
|
Для сервера эта "правда" всегда должна равняться false.
|
Поэтому объект должен быть на сервере, см пост выше умнег.
|
|
16.08.2016, 15:03
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Несешь бред, понос словесный о базе и прочей лабуде.
|
|
16.08.2016, 18:30
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
laimas, ты же вроде специалист по реляционным беде и должен знать, как получить инфу о таблице. Это можно сделать в том числе через information_schema, зацени
$q='select `table_name`,`column_name`,`data_type` as `dtype`,
coalesce(`character_maximum_length`,`numeric_precision`) as `maxlength`,
`numeric_scale` as `decimals`,
`column_key`,
(`is_nullable`="NO" && `column_default` is NULL) as `required`,
`column_default` as `value`,
`column_type` as `data`
from `information_schema`.`columns`
where `table_schema`="'.$this->db_name.'"
and `table_name`="'.$table_name.'"';
Затем еще немного преобразования табличных типов данных в типы полей формы
$sql_types=array(
'varchar|text|year|char|tinytext|mediumtext|longtext' => 'text',
'int|decimal|tinyint|smallint|mediumint|bigint|float|double|real' => 'number',
'enum|set' =>'select',
'timestamp' =>'datetime-local',
'bit|boolean|serial'=>'range'
);
и конечно потребуется процедура и получаем заготовку с массой готовой инфы, которую уже не надо профтыкать в моделях. Узбагойся уже.
|
|
16.08.2016, 18:53
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от warren buffet
|
ты же вроде специалист по реляционным беде и должен знать
|
Ты может и специалист по "реляционным беде", а не являюсь специалистом по беде, унитазам, да и вообще по сантехнике.
Характеристики полей таблицы могут служить источником для конструктора форм, только получают их не так примитивно, как это ты излагаешь, а тем более не для того, чтобы содержать их под такими ужасающими ключами в массиве.
Но дело не в этом - нафига весь этот понос нужен в контексте темы, где речь об отправке почты от формы, которая даже раз в 100 лет не потребует изменений, и ее данные не нужно сохранять в базе? Вот ради чего это твое очередное словоблудие? Подсказать способ проверки полей этой формы? Так причем тут база, если в данном случае на все 100 выгоднее просто прописать условия, да и направить эти данные в единый валидатор данных если он есть труда не составит.
В очередной раз хотелось показаться умным? Так наоборот получается - код настолько слаб и необдуман, что впору назвать его твоей же терминологией - дебильный.
Прежде чем ляпнуть языком - думай, и если есть действительно нужное и полезное говори, нет, молча проходи мимо. И не дублируй уже все высказанное в темах практически "вылизанных", твоя "точка" в них это уже гольный флуд.
|
|
16.08.2016, 18:59
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Сообщение от laimas
|
и ее данные не нужно сохранять в базе?
|
Я понял, ты теоретический дятел, ничего толком не создававший сроду. Иначе бы тебя жизнь заставила сохранять все фидбеки и камбеки и калбеки в беде. Иначе ты просто не узнаешь написали тебе с сайта или письмо утонуло в фильтрах гугля или мыла. Эти письма вообще чисто сигнальная система, все новые сообщения с сайта оператор просматривает на самом сайте, благо что у сайта есть бд и в этой бд все запросто сохраняется.
|
|
16.08.2016, 19:04
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Сообщение от laimas
|
в единый валидатор данных если он есть труда не составит.
|
Дуся, нет никакого единого валидатора в мире. Любое поле само себя проверяет, поскольку оно - объект, то есть обладает свойствами и имеет методы. В html5 в точности все реализовано как это делали до html5 грамотные люди.
|
|
16.08.2016, 19:06
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от warren buffet
|
Иначе бы тебя жизнь заставила сохранять все фидбеки и камбеки и калбеки в беде.
|
В беде моют наружные половые органы. Ну а ты можешь в нем и хранить и фид, и бек, и что угодно, я не против.
Ты начитался умных книжек, а пользоваться этим не умеешь, я уже трижды наблюдаю твой "пехепе" - полнейший бред. У тебя есть проблески разумного в JS и даже без лексики гопника, но они так редки, что невольно возникает подозрение, не плагиат ли это.
Пиши в "пехепе", храни в "беде", верстай в "хтмля", я не против.
|
|
16.08.2016, 19:12
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Слушай, но ведь твои "чеса" с лихвой перекрывают все беде и пехепе. Или нет? )))
|
|
16.08.2016, 20:18
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Идея "единого валидатора" живее всех живых. На самом деле делается ровно наоборот, вот как на пехепе.
foreach($this->_d as $field) {
try {
if($field->name)
$field->validate($post);
}
catch(_CException $e){
/* уловитель ошибок */
}
}
и примерно то же самое на js, но без цикла, потому что поле просто вызывает валидацию самого себя через "единую" функцию, где надо провести некоторые мероприятия общего порядка, вроде стереть предыдущую ошибку и проверить как там с остальными полями - можно ли включать кнопку "Отправить".
validate=function(evt) {
var input=the.inputs[evt.detail.name];
/* тут обнуляется прошлое */
try {
input.validate();
isComplete(); /* быстрый осмотр индикаторов ошибок всех полей */
}
catch(e) {
/* уловитель ошибок */
}
}
the.form.addEventListener('validate',validate);
То есть это метод валидации на лету, когда кнопка Отправить становится активной только когда можно отправлять.
Так вот, а теперь моем внешние половые органы в беде. В такой конфигурации я добавляю поле в таблице базы данных и, если меня не колебет перевод на русский язык его названия и не колебет расположение в форме - мне ничего делать больше не надо: поле появится в форме со всей минимально необходимой инфой и для верстки и для проверки. То есть такой мини phpMyAdmin.
Само собой абсолютно любую форму обслуживают одни и те же скрипты. Хоть 100500 форм нарисуй - все что потребуется, это перевести на русский название поля и определить его метоположение в форме если хочется дизайна, а не хочется - оно и так одно за другим выведется с оригинальными именами.
Последний раз редактировалось warren buffet, 16.08.2016 в 20:22.
|
|
|
|