Форум программистов, компьютерный форум, киберфорум
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
zardoz
0 / 0 / 0
Регистрация: 12.11.2007
Сообщений: 31
1

Создание универсального обработчика форм

06.01.2008, 09:56. Просмотров 1372. Ответов 9
Метки нет (Все метки)

Есть задача сделать универсальную обработку форм, то есть - есть набор функции которые обрабатывают форму и страницу шаблон, на выходе результат в зависимости от того заполнена форма или нет, отправлена форма по мылу или нет, как лучше подступиться. универсальность требуется для того чтобы быстрее переносить механизм на новый сайт или новую форму на сайте, не меняя ничего в работе обработки...
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.01.2008, 09:56
Ответы с готовыми решениями:

Создание универсального окна с календарем.
Простая ситуация: Есть поле на форме с датой и кнопкой рядом. По нажатии на кнопку вызываеться...

Создание обработчика на несколько событий
Надеюсья верно выразился, т.к. сам только вчера начал изучать все это дело.. Короче есть такой...

Проектирование форм и создание обработчика события для компонентов TEdit, TButton, TBitBtn. Компоненты TLabel, TMemo
Всем привет! Помогите написать код для приложения. Как правило, использование семейного бюджета...

Пример универсального обработчика ошибок (автоматически определяет текущий модуль и процедуру)
В результате ошибки в коде появляется сообщение в котором указаны: 1. Название mdb 2. Название...

9
Sergik
08.01.2008, 12:29 2
без мазы, если делать что-то универсальное, то быстро потеряется персонализированность под конкретную задачу (получится второй ASPMaker http://relib.com/forums/topic.asp?id=729408), хотя что-то безусловно сделать можно, к примеру у меня есть функция, в которую передается тип SQL-запроса, название таблицы и названия полей (через запятую), которые не нужно включать в SQL-запрос; и эта функция формирует 'безопасный' (то есть с заменами апострофов и т.п.) SQL-запрос. Теперь я уже не пишу большие SQL-запросы и трачу меньше времени на программирование. Следует при разработке кода делать его как можно универсальнее (естественно не затрачивая на это много времени), тогда быстрее получится подключить его к другому проекту
negorro
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% процентах случаев (по моему опыту), если уж формы совсем простые
negorro
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);}
явно недостаточно, елси используются пользователи с разным уровнем доступа
negorro
0 / 0 / 0
Регистрация: 27.12.2007
Сообщений: 140
08.01.2008, 18:12 9
Полностью согласен Sergik
Я ни чего не предлагаю универсального лишь хотел показать zardoz лично мой путь к созданию чего-то универсального в рамках конечно моей текущей задачи.Это даже не 50% процентов того чего я хотелбы а именно тот этап на котором стою сейчас,а может быть и топчусь на месте.Предложить можно только готовое решение а мое еще сырое и я его ни кому не предлагаю.
Что касается проверки подлинности то все работает пока нормально и меня это устраивает.У каждого пользователя свои права на документ,справочник,запись в таблице и все это храниться в базе и при инициализации сохраняется в его сессии.А при обращении к документу см.продолжение того чего ты написал.Может это и не правильно но это то что изначально пришло мне в голову.(Кстати БД изначально была Аксесовская).Может я когда нибудь от этого и откажусь.
А кому чего-то не хочется сделать такого эдаково 'универсального'!
Начинается все с кучи Тегов.Потом отслеживается закономерность.Потом тегов становиться меньше а больше функций.И т.д. и т.п. Но это в процессе работы.Работать!Работать!И еще много много раз!!
P.S.А перед глазами у меня так спроектированная БД что после конекшена с ней перед пользователем прекрасный интранет сайт с правами доступа и всеми наворотами и вызывается это все одной функцие gogogo().Шутка конечно.До завтра! :-))
0
zardoz
0 / 0 / 0
Регистрация: 12.11.2007
Сообщений: 31
11.01.2008, 13:18  [ТС] 10
к сожалению пропадал из инете немного, поэтому пропадал. Суть вот в чем, раньше для каждой формы было три файла форма шаблон для отсылки на мыло, файл сообщающий об успешной отправке, и файл в случае если форма была запонена с ошибкой. Форма обрабатывается асп которая вызывает функции проверки, отправки, и в зависимости от этого парсеру передается один из фалов он обрабатывается и выводится. но этот вариант стал неудобен когда в файлы стали содержать асп инструкции. Пришлось искать новый путь...
Вообщем то вот что придумал: каждая форма выводится функцией, функция проверки заполнения и отправки на намыло для всех форм одна, то есть когда появляется новая форма, надо тока написать еще одну функцию выводящую форму.
0
11.01.2008, 13:18
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2008, 13:18

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

Создание универсального триггера
Добрый вечер. Есть вопрос по Transact-SQL Итак, есть задание написать триггер на некоторую...

Создание универсального шаблона
Не понимаю програмную реализацию задания. Создайте класс MyClass&lt;T&gt;, содержащий статический...

Создание универсального стека
Прошу помощи в создании универсального стека. Вообще в реализации стека хранящего определенный тип...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.