Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> множество форм на странице 
V
    Опции темы
ksnk
Дата 14.7.2010, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Нужны какие-то концептуальные идеи. Код сам напишу smile 

Есть странички, на которых странным образом может появляться неопределенное количество форм. Пользователь может в любой момент заполнить и послать на сервер любую форму. (Тупой пример - форма логина, форма поиска, форма голосования за многие вещи, обратная связь...) Требуется придумать схему, каким образом на стороне сервера определить какая из форм заполнена и обработать ее.

Число форм, обслуживаемое приложением, велико. На страничке могут оказаться несколько из обслуживаемых форм. одновременно может быть открыто и заполнено(на разных вкладках) несколько разных форм. 

Каждая форма обрабатывается отдельным классом/функцией. Функция умна и сама знает какие поля у формы были и в состоянии проверить 

Варианты решения:
-- Запоминать имена форм, выведенные на страничку в сессии и при выводе странички сначала проверить именно их.
Imho, не очень правильно, так как сессии может и не быть и стартовать ее насильно не очень хочется. + страничка может висеть достаточно долгое время, сессия может и сдохнуть.

-- указывать имя обработчика формы в адресной строке. Imho, не очень удобно пока, так как формы, преимущественно, должны после обработки вести на ту-же страничку, на которой они вводились. Таким образом, action у форм сейчас пустой action="". И этот адрес я вычисляю по REQUEST_URI

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

Может еще какие идеи есть?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
bars80080
Дата 14.7.2010, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(ksnk @  14.7.2010,  15:15 Найти цитируемый пост)
Может еще какие идеи есть? 

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

если формы отправляются по одиночке, то самое простое - имя кнопки submit, если кнопка у каждой формы своя
если форма одна на всё (имхо зря), то либо включать сектора по изменению поля некоторой подформы. включение - запись javascript'ом в скрытое поле номера сектора.
если вопрос просто как узнать какие формы были отправлены, чтобы их потом обработать - так закидывать в скрытое поле имя и всё.
опять же настаиваю на номерах и схемах, имхо, безопасней, проще и эффективнее ничего придумать нельзя
PM MAIL WWW   Вверх
ksnk
Дата 21.7.2010, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



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


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Muerto
Дата 21.7.2010, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

Репутация: 3
Всего: 4



ksnk, Тебе скрытые поля не нужны!

Просто кнопку отправки называй по разному

name=form1
name=form2 

а можно вообще name=submit value=form1 value=form2

Такой фокус даже с одной формой можно делать, если хочешь её отсылать в разные места...


--------------------
user posted image
PM MAIL   Вверх
ksnk
Дата 21.7.2010, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Muerto, Imho, добавить автоматом скрытое поле проще, чем поменять имя кнопки сабмита.
Ибо она как правило, никак не названа, А когда названа - их несколько, а иногда и javascript'ом  формы сабмитится...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Muerto
Дата 21.7.2010, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

Репутация: 3
Всего: 4



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

Это сообщение отредактировал(а) Muerto - 21.7.2010, 12:59


--------------------
user posted image
PM MAIL   Вверх
krasgames
Дата 23.7.2010, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Старый мастер
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 4.12.2009

Репутация: нет
Всего: нет



А мне надо написать так, как тут: http://vkontakte.ru/editProfile.php?act=addresses(по принципу). Именно самому.
То есть не самому, а вы должны помочьsmile

Это сообщение отредактировал(а) krasgames - 23.7.2010, 15:19
PM MAIL   Вверх
ksnk
Дата 23.7.2010, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



krasgames, тут не совсем мой случай Тут одна форма на страницу.

А что не получается? открутить мафондизайн или что-то еще?  smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
krasgames
Дата 23.7.2010, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Старый мастер
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 4.12.2009

Репутация: нет
Всего: нет



Я еще даже про алгоритм не знаю). Пишу на smarty. Вот, например,у меня в таблице нет строк, где имя юзера совпадает с сессионным. Тогда на странице редактирования tpl я вывожу в форме только одну совокупность полей, значения из которых заполнят строку. Ниже должна быть ссылка на добавление еще одной группы элементов. 
1. Как сделать добавление еще одной группы элементов?
2. Как назвать элементы в разных группах?
Если строки, принадлежащие пользователю, в той же таблице есть, то выводятся дополнительные группы (это можно сделать и loop'om без придумывания счетчиков и тп), они заполняются значениями ячеек из таблиц. При передаче данных в php-script каким-то образом (в зависимости от названия инсертов) должно производится считывание всех полей (а не только измененных, но может можно и упростить, но тогда это вам предлагать). 
3. Как скрипт должен получить данные и как заполнить базу сразу несколькими строками? 
 smile 

Это сообщение отредактировал(а) krasgames - 23.7.2010, 17:26
PM MAIL   Вверх
ksnk
Дата 23.7.2010, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(krasgames @  23.7.2010,  17:25 Найти цитируемый пост)
Вот, например,у меня в таблице нет строк, где имя юзера совпадает с сессионным

У меня тоже нет... вот только почемуто мне это не важно...
Цитата(krasgames @  23.7.2010,  17:25 Найти цитируемый пост)
Пишу на smarty

Цитата(krasgames @  23.7.2010,  17:25 Найти цитируемый пост)
Тогда на странице редактирования tpl я вывожу в форме только одну совокупность полей...

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



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
krasgames
Дата 24.7.2010, 06:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Старый мастер
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 4.12.2009

Репутация: нет
Всего: нет



Цитата

У меня тоже нет... вот только почемуто мне это не важно..

Ну мне тоже. Просто это я перечисляю случаи.
Цитата

Мой опыт использования смарти очень поверхностный

Да без разницы, со смарти или без смарти. Те же php файлы, просто потом, в конце концов, отображаешь тпл и кидаешь туда все переменные. Мне вообще надо алгоритм, как это написать.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1213 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.