![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Нужны какие-то концептуальные идеи. Код сам напишу
Есть странички, на которых странным образом может появляться неопределенное количество форм. Пользователь может в любой момент заполнить и послать на сервер любую форму. (Тупой пример - форма логина, форма поиска, форма голосования за многие вещи, обратная связь...) Требуется придумать схему, каким образом на стороне сервера определить какая из форм заполнена и обработать ее. Число форм, обслуживаемое приложением, велико. На страничке могут оказаться несколько из обслуживаемых форм. одновременно может быть открыто и заполнено(на разных вкладках) несколько разных форм. Каждая форма обрабатывается отдельным классом/функцией. Функция умна и сама знает какие поля у формы были и в состоянии проверить Варианты решения: -- Запоминать имена форм, выведенные на страничку в сессии и при выводе странички сначала проверить именно их. Imho, не очень правильно, так как сессии может и не быть и стартовать ее насильно не очень хочется. + страничка может висеть достаточно долгое время, сессия может и сдохнуть. -- указывать имя обработчика формы в адресной строке. Imho, не очень удобно пока, так как формы, преимущественно, должны после обработки вести на ту-же страничку, на которой они вводились. Таким образом, action у форм сейчас пустой action="". И этот адрес я вычисляю по REQUEST_URI -- в скрытое поле формы с определенным именем впихивать имя вызываемой функции myclass:myform. при получении такого параметра в реквесте, ищем класс myclass и его метод handle_myform и вызываем его - пусть разбирается... префикс handle_ перед классом нужен, чтобы ушлый хакер не смог вызвать вообще любую функцию системы, а только специально заточеную... Как вариант - указывать можно только имя класса и вызывать специальную функцию этого класса. Может еще какие идеи есть? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
в своё время страдал я целью всеобъемлющего кода, потом как-то дошло, что ничего универсального быть не может. в итоге пришёл к варианту класса по схеме. то есть пишем схему в виде массива (имя поле такое, тип поля такой, такие-то параметры), а класс строит по ней саму форму. то же самое для обработки, схема в виде массива, загружаем класс, он проверяет нужные поля и запихивает их в нужные таблицы то есть тут без всяких передаваемых имён обработчиков. просто проверяется, есть ли массив с таким именем или нет (массивы в сериализованном виде легко хранить в БД). если формы отправляются по одиночке, то самое простое - имя кнопки submit, если кнопка у каждой формы своя если форма одна на всё (имхо зря), то либо включать сектора по изменению поля некоторой подформы. включение - запись javascript'ом в скрытое поле номера сектора. если вопрос просто как узнать какие формы были отправлены, чтобы их потом обработать - так закидывать в скрытое поле имя и всё. опять же настаиваю на номерах и схемах, имхо, безопасней, проще и эффективнее ничего придумать нельзя |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Остановился на варианте - скрытое поле формы. В это поле вписывается "имя" формы, которое по совместительству указывает на обрабатывающую эту форму процедуру. "имя" формы располагается в поле с характерным именем, так что расходы на обслуживание неожиданно свалившихся форм, вроде как минимальны...
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Muerto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: 3 Всего: 4 |
ksnk, Тебе скрытые поля не нужны!
Просто кнопку отправки называй по разному name=form1 name=form2 а можно вообще name=submit value=form1 value=form2 Такой фокус даже с одной формой можно делать, если хочешь её отсылать в разные места... |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Muerto, Imho, добавить автоматом скрытое поле проще, чем поменять имя кнопки сабмита.
Ибо она как правило, никак не названа, А когда названа - их несколько, а иногда и javascript'ом формы сабмитится... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Muerto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: 3 Всего: 4 |
ksnk, Ну зависит конечно от того что нужно...
Большой плюс моего варианта в том что можно отправлять ту же форму в "разные места" Поставив несколько кнопок сабмита... Это сообщение отредактировал(а) Muerto - 21.7.2010, 12:59 |
|||
|
||||
| krasgames |
|
|||
|
Старый мастер ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 4.12.2009 Репутация: нет Всего: нет |
А мне надо написать так, как тут: http://vkontakte.ru/editProfile.php?act=addresses(по принципу). Именно самому.
То есть не самому, а вы должны помочь Это сообщение отредактировал(а) krasgames - 23.7.2010, 15:19 |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
krasgames, тут не совсем мой случай Тут одна форма на страницу.
А что не получается? открутить мафондизайн или что-то еще? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| krasgames |
|
|||
|
Старый мастер ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 4.12.2009 Репутация: нет Всего: нет |
Я еще даже про алгоритм не знаю). Пишу на smarty. Вот, например,у меня в таблице нет строк, где имя юзера совпадает с сессионным. Тогда на странице редактирования tpl я вывожу в форме только одну совокупность полей, значения из которых заполнят строку. Ниже должна быть ссылка на добавление еще одной группы элементов.
1. Как сделать добавление еще одной группы элементов? 2. Как назвать элементы в разных группах? Если строки, принадлежащие пользователю, в той же таблице есть, то выводятся дополнительные группы (это можно сделать и loop'om без придумывания счетчиков и тп), они заполняются значениями ячеек из таблиц. При передаче данных в php-script каким-то образом (в зависимости от названия инсертов) должно производится считывание всех полей (а не только измененных, но может можно и упростить, но тогда это вам предлагать). 3. Как скрипт должен получить данные и как заполнить базу сразу несколькими строками? Это сообщение отредактировал(а) krasgames - 23.7.2010, 17:26 |
|||
|
||||
| ksnk |
|
||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
У меня тоже нет... вот только почемуто мне это не важно...
Мой опыт использования смарти очень поверхностный. Мне представлялось, что все шаблоны смарти - суть текстовые файлы, которые нужно править ручками в обычном редакторе... Может разумнее обратится к документации? Где-нибудь она наверное есть? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
||||
|
|||||
| krasgames |
|
||||
|
Старый мастер ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 4.12.2009 Репутация: нет Всего: нет |
Ну мне тоже. Просто это я перечисляю случаи.
Да без разницы, со смарти или без смарти. Те же php файлы, просто потом, в конце концов, отображаешь тпл и кидаешь туда все переменные. Мне вообще надо алгоритм, как это написать. |
||||
|
|||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |