0 / 0 / 0
Регистрация: 12.11.2007
Сообщений: 31
|
|
1 | |
Создание универсального обработчика форм06.01.2008, 09:56. Показов 1652. Ответов 9
Метки нет Все метки)
(
Есть задача сделать универсальную обработку форм, то есть - есть набор функции которые обрабатывают форму и страницу шаблон, на выходе результат в зависимости от того заполнена форма или нет, отправлена форма по мылу или нет, как лучше подступиться. универсальность требуется для того чтобы быстрее переносить механизм на новый сайт или новую форму на сайте, не меняя ничего в работе обработки...
0
|
|
06.01.2008, 09:56 | |
Ответы с готовыми решениями:
9
Создание универсального окна с календарем. Создание универсального шаблона Создание универсального метода выборки из БД и прикрепления в качестве источника данных к комбобоксу
|
Sergik
|
|
08.01.2008, 12:29 | 2 |
без мазы, если делать что-то универсальное, то быстро потеряется персонализированность под конкретную задачу (получится второй ASPMaker http://relib.com/forums/topic.asp?id=729408), хотя что-то безусловно сделать можно, к примеру у меня есть функция, в которую передается тип SQL-запроса, название таблицы и названия полей (через запятую), которые не нужно включать в SQL-запрос; и эта функция формирует 'безопасный' (то есть с заменами апострофов и т.п.) SQL-запрос. Теперь я уже не пишу большие SQL-запросы и трачу меньше времени на программирование. Следует при разработке кода делать его как можно универсальнее (естественно не затрачивая на это много времени), тогда быстрее получится подключить его к другому проекту
|
0 / 0 / 0
Регистрация: 27.12.2007
Сообщений: 140
|
|
08.01.2008, 13:20 | 3 |
Просто для примера привожу код одной из страниц чтоб тебе было понятно что такое универсализация в программе ( у меня их >150 asp. в прогармме).
<%@ LANGUAGE='JScript'%> ***Это файл где описаны все нижеперечисленные функции <!--#include virtual='/inc/funcall.inc'--> <% **отсеиваем хаккеров(ламаков) control1(); **функцию работы с базой можешь найти по ://www.relib.com/sources/code.asp?id=546 add(); title(Session('usertype')); body_back(); if (String(Request.QueryString ('id'))=='undefined'){ %> <a href='./'><img alt src='IMG/Logotip.gif' border='0' WIDTH='40' HEIGHT='40' align=absmiddle>Главная</a> <% **показывает таблицу из БД (постранично,по русски,с поиском,сортировкой) prokrutka1('gurnalbarabans.asp','Журнал работы сушильного барабана', 'select * from viewgurnalbaraban where id>0 ', 'дата,смена,время сушки,материал,t сушки,t газов', 'data,id_smen,vrem,sirmat,tsuh,tgaz', 'id', 'data;data;id_smen;;sirmat', 'data;id_smen;;sirmat', '1,1,0,1,0,0,0', 'undefined', 'undefined', 'undefined', 14); }else{ **показывает форму для добавления или корректировки записей Session('table')='gurnalbaraban'; Session('field')='data,id_smen,vrem,id_sirmat,tsuh,tgaz'; Session('ftype')='o,s,no,s,n,n,'; Session('info')='data,Смена,Время сушки,Материал,Температура сушки,Температура отх.газов,id_user'; id=String(Request('id')); data=DateToStr(new Date()); dat1=new Date(); id_smen=0; smen=''; name=''; id_sirmat='0'; vrem=''; tsuh=''; tgaz=''; if (id !='0'){ result=conn.Execute('select * from viewgurnalbaraban where id='+id); data=DateToStr(new Date(result('data'))); dat1=new Date(result('data')); id_smen=ShowStr1(String(result('id_smen'))); vrem=ShowStr1(String(result('vrem'))); smen=ShowStr1(String(result('id_smen'))) tsuh=ShowStr1(String(result('tsuh'))); tgaz=ShowStr1(String(result('tgaz'))); id_sirmat=ShowStr1(String(result('id_sirmat'))); name=ShowStr1(String(result('sirmat'))); } if (id =='0'){ result=conn.Execute('Select max(id) as maxid from viewgurnalbaraban'); maxid=String(result('maxid')); result=conn.Execute('select * from viewgurnalbaraban where id='+maxid); data=DateToStr(new Date(result('data'))); dat1=new Date(result('data')); id_smen=ShowStr1(String(result('id_smen'))); vrem=ShowStr1(String(result('vrem'))); smen=ShowStr1(String(result('id_smen'))) tsuh=ShowStr1(String(result('tsuh'))); tgaz=ShowStr1(String(result('tgaz'))); id_sirmat=ShowStr1(String(result('id_sirmat'))); name=ShowStr1(String(result('sirmat'))); } form_start('gurnalbarabans.asp'); %> <center><TABLE WIDTH=630 BORDER=2 CELLSPACING=0 CELLPADDING=0> <%form_calend('Дата','data',data,30,dat1);%> <%form_sprav('Смена','smen',smen,50,'id_smen',id_smen,''Sprsmen','id','name'');% > <%form_text('Время','vrem',vrem,30);%> <%form_sprav('Материал','name',name,50,'id_sirmat',id_sirmat,''SprSirMat','id',' sirmat'');%> &
0
|
Sergik
|
|
08.01.2008, 13:31 | 4 |
что-то навроде этого, только не так все жутко запутанно, в среднем 20 минут на простую форму (насчет 15 минут в данном случае сомневаюсь, это набирать только 15 минут)
а что это за >>**отсеиваем хаккеров(ламаков) >>control1(); было бы интересно посмотреть? |
Sergik
|
|
08.01.2008, 13:35 | 5 |
посмотрел ссылку по работе с БД на этом сайте - подходит только в 20% процентах случаев (по моему опыту), если уж формы совсем простые
|
0 / 0 / 0
Регистрация: 27.12.2007
Сообщений: 140
|
|
08.01.2008, 14:13 | 6 |
2 Serik
Запутано на первый взгляд.Я бы сказал там много не хватает. Набирать ее не надо.Достаточно сохранить под другим именем а дальше: prokrutka(имя нового asp,Заголовок таблицы, запрос, поля для показа, Label, key для вызова формы, поля для сортировки, поля для поиска, по каким полям можно искать и сортировать, asp-вложенной таблицы, Имя реквеста для вложенной, key для вложенной. Форма: Session('table')=таблица которую обработает ADD(); Session('field')=ee поля; Session('ftype')='o,s,no,s,n,n,'-это типы полей o-обязятельное;s-локап из другой таблици(просто текст ввести не даст заставит выбрать из словаря);n-числовое необязательное;no-числовое обязательное;a-вводи че хочешь Session('info')='data,Смена,Время сушки,Материал,Температура сушки,Температура отх.газов,id_user';-чтоб сформировать скрипт у клиента и выдать типа 'Поле материал необходимо выбрать из словаря; Далее всем переменным значение по умолчанию; Далее если корректировка то из базы; Ну и строим саму форму: <%form_calend('Дата','data',data,30,dat1);%> Поле с датой и рядом кнопочка календарь(в ручную не набьешь) <%form_sprav('Смена','smen',smen,50,'id_smen',id_smen,''Sprsmen','id','name'');% > Локап поле а рядом кнопочка справочник <%form_text('Время','vrem',vrem,30);%> Обычное текстовое поле; В завершении form_end(id) показывает либо 'назад и добавить' либо 'назад сохранить удалить' Правда если ты будешь менять ее в первый раз у тебя уйдет не менее часа-проверено. Насчет хаккеров: function control1(){ if (String(Session('logged')) !='true'){Response.Redirect(home);} if (String(Request.ServerVariables('HTTP_REFERER'))=='undefined'){Response.Redirect (home);} if (String(Session(String(Request.ServerVariables('SCRIPT_NAME'))))=='undefined'){ Session(String(Request.ServerVariables('SCRIPT_NAME')))=String(Session('dstp')); } Session('dstp')=String(Session(String(Request.ServerVariables('SCRIPT_NAME')))); if (Session('dstp')=='undefined'){Response.Redirect(home);} dstp=String(Session('dstp')); } А переменная dstp в зависимости от значения в prokrutke покажет тебе кнопочку добавить и изменить запись.Правда пр эту функцию я уже забыл почти год назад, может она и кривая. Ну а насчет примера то там только принцип для ясности я там много повырезал.
0
|
Sergik
|
|
08.01.2008, 14:21 | 7 |
ключевая фраза тут: 'сохраняем под другим именем', это не универсальность, когда код повторяется, по идее вся форма в итоге должна состоять из вызова только одной функции с n-ным количеством параметров.
К тому же много избыточной информации, например: >>Session('table')=таблица которую обработает ADD(); >>Session('field')=ee поля; >>Session('ftype')='o,s,no,s,n,n,'-это типы полей и список полей и их типы можно узнать, зная только имя таблицы |
Sergik
|
|
08.01.2008, 14:23 | 8 |
такой проверки от хакеров:
if (String(Session('logged')) !='true'){Response.Redirect(home);} явно недостаточно, елси используются пользователи с разным уровнем доступа |
0 / 0 / 0
Регистрация: 27.12.2007
Сообщений: 140
|
|
08.01.2008, 18:12 | 9 |
Полностью согласен Sergik
Я ни чего не предлагаю универсального лишь хотел показать zardoz лично мой путь к созданию чего-то универсального в рамках конечно моей текущей задачи.Это даже не 50% процентов того чего я хотелбы а именно тот этап на котором стою сейчас,а может быть и топчусь на месте.Предложить можно только готовое решение а мое еще сырое и я его ни кому не предлагаю. Что касается проверки подлинности то все работает пока нормально и меня это устраивает.У каждого пользователя свои права на документ,справочник,запись в таблице и все это храниться в базе и при инициализации сохраняется в его сессии.А при обращении к документу см.продолжение того чего ты написал.Может это и не правильно но это то что изначально пришло мне в голову.(Кстати БД изначально была Аксесовская).Может я когда нибудь от этого и откажусь. А кому чего-то не хочется сделать такого эдаково 'универсального'! Начинается все с кучи Тегов.Потом отслеживается закономерность.Потом тегов становиться меньше а больше функций.И т.д. и т.п. Но это в процессе работы.Работать!Работать!И еще много много раз!! P.S.А перед глазами у меня так спроектированная БД что после конекшена с ней перед пользователем прекрасный интранет сайт с правами доступа и всеми наворотами и вызывается это все одной функцие gogogo().Шутка конечно.До завтра! :-))
0
|
0 / 0 / 0
Регистрация: 12.11.2007
Сообщений: 31
|
|
11.01.2008, 13:18 [ТС] | 10 |
к сожалению пропадал из инете немного, поэтому пропадал. Суть вот в чем, раньше для каждой формы было три файла форма шаблон для отсылки на мыло, файл сообщающий об успешной отправке, и файл в случае если форма была запонена с ошибкой. Форма обрабатывается асп которая вызывает функции проверки, отправки, и в зависимости от этого парсеру передается один из фалов он обрабатывается и выводится. но этот вариант стал неудобен когда в файлы стали содержать асп инструкции. Пришлось искать новый путь...
Вообщем то вот что придумал: каждая форма выводится функцией, функция проверки заполнения и отправки на намыло для всех форм одна, то есть когда появляется новая форма, надо тока написать еще одну функцию выводящую форму.
0
|
11.01.2008, 13:18 | |
Помогаю со студенческими работами здесь
10
Создание обработчика на несколько событий
Обработчик событий в коде: динамическое создание TextBox с присоединением обработчика Проектирование форм и создание обработчика события для компонентов TEdit, TButton, TBitBtn. Компоненты TLabel, TMemo Пример универсального обработчика ошибок (автоматически определяет текущий модуль и процедуру) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |