Rambler's Top100
, : |

! : http://dreamweaver.net.ru/new-forum/

| FAQ | | |

форма с переменным набором полей, можно ли такое реализовать

 
  ,         .     ,        .     Форум Macromedia Dreamweaver -> Динамические страницы
 
VT
Новичок

Новичок


: 60

: 06.11.2005
: 6

: 08, 2005 11:43 am     : форма с переменным набором полей, можно ли такое реализовать

Постановка задачи.
Есть таблица с полями a01, a02 .... a50 (т.е. полей много, для определенности - все символьные).
В зависимости от сценария при вводе/редактировании записи в экранной форме должны отображаться наборы полей.
Наприме a15, a04, a43, a20
Сценарии с наборами полей и их очередностью при отображении в форме хранятся в справочной таблице.
Наперед наплодить форм под каждый сценарий - нереально, да и бессмысленно, поскольку сценарии время от времени меняются при неизменной программе.
Вопрос: возможно ли реализовать данную задачу при помощи связки DreamWeaver 8 + Денвер, ну и где-то ручками?
Если нет, то какими средствами лучше решать данную задачу?
С уважением,
Владимир.
Денис
Модератор

Модератор


: 42

: 21.08.2004
: 1490
: Санкт-Петербург

: 08, 2005 2:02 pm     :

VT, обычно я такие задачи ручками решаю - в смысле ручного ввода. С Денвером можно решить все.

Теперь что касается вопроса:

Насколько я понял, Вам необходимо изменять содержимое только определенных полей вне зависимости от того, есть ли там данные или нет. Если я прав, то можно сделать страницу, на которую выводятся форма с checkbox`ами, соответствующие каждому полю в Вашей таблице. Выводить их можно циклом FOR, предварительно дав соответствующий запрос MySQL (надеюсь, что БД у Вас именно такая). Каждому checkbox`у присвоить атрибут name в соответствии с именем поля. При редактировании записи в таблице юзер попадает на страницу, на которой ему необходимо выбрать необходимые ему поля с помощью checkbox`ов. Выбрав, юзер кликает кнопку "Выести запись" и переходит на страницу, на которую в соответствии с выбранными checkbox`ами выводится в соответствующие поля соответствующие значения.

Вообще, это общий метод. Попробуйте либо сформулировать Ваш вопрос точнее (с названиями таблиц и проч.), либо, приняв изложенное выше за основу, написать свой сценарий.

Если что - обращайтесь Exclamation
OldFornit
Модератор

Модератор


: 36

: 12.05.2005
: 846

: 08, 2005 5:12 pm     :

Денис, Выести запись - мне понравилось ))))
Денис
Модератор

Модератор


: 42

: 21.08.2004
: 1490
: Санкт-Петербург

: 08, 2005 8:35 pm     :

Ну да, выгрызть ее, так сказать... Кстати, OldFornit, есть другие варианты решения проблемы?
OldFornit
Модератор

Модератор


: 36

: 12.05.2005
: 846

: 09, 2005 8:31 am     :

ну, генерировать форму циклом - самое простое решение.

Если бы мне захотелось поизвращаться, я бы играл от стилевки (свойство visible)+java-script.
Причем примерный сценарий такой - в верхней части экрана набор чекбоксов (можно даже и ссылок). При клике на них срабатывает скрипт, который придает полю visible: visible и задает координаты на экране.
Причем придется учитвывать тонкости типа того, что уже введенное поле сделали невидимым, соотвтественно и данные в нем как бы и не нужны

Вот, собственно, и все )))
Минус - сложно
Плюс - обходимся без релоада страницы
Денис
Модератор

Модератор


: 42

: 21.08.2004
: 1490
: Санкт-Петербург

: 09, 2005 10:26 am     :

OldFornit, мне кажется, что минус перевешивает плюс...
VT
Новичок

Новичок


: 60

: 06.11.2005
: 6

: 09, 2005 10:42 am     :

Денис и OldFornit, спасибо за оперативный ответ.
По пунктам:
1. База данных - MySQL
2. Обычный Пользователь, имеющий право на редактирование таблицы, о ее структуре знать ничего не должен, более того, не дай бог ему заполнить необъявленные сценарием поля. Предполагается, что предварительные действия Пользователя до вызова данной формы, а именно: выбор нужной рубрики, выбор типа информации и т.п., вполне однозначно позволяют определить номер сценария, а значит и перечень и последовательность показа полей в форме.
3. Денис попросил сформулировать вопрос точнее. Я поэтому сделаю небольшой экскурс в историю:
Все, что я описал работает в неинтернетовском варианте, в частности на Fox-е, для файл-сервера и для клиент-сервера, в программе, которой уже около 10 лет. Там при открытии формы я уже имею нужную запись таблицы, целиком, имею номер сценария. Имеется также справочник сценариев, в котором для каждого сценария расписана последовательность отображения полей (масиивом, через запятую, табличкой с записями в нужном порядке, - не важно).
Далее в разное время, работали два варианта:
а) в форме уже содержатся текстбоксовые заготовки под поля. При инициализации формы оставляются первые N полей видимыми, при этом каждому текстбоксу указывается, какое поле является его источником. Лишние текстбоксы делаются невидимыми. (Данный вариант годился, когда количество полей в таблице было невелико).
б) Изначально форма - голая, с парой кнопок ввода и отказа. При инициализации формы - сканируется список полей в соответствии со сценарием. При этом в форму добавляются нужные объекты для каждого поля: тектбокс с соответствующими свойствами, ну и посняющие Label-ы к нему. Есть еще навороты в виде кнопок, вызывающих справочники, если поля должны заполняться значениями из справочников, но это пока опустим.
Вот такая описательная, в два этапа, получилась постановка задачи.

Я плохо представляю возможности языков PHP и JavaScript.
Можно ли сделать в php-файле кострукцию вида:
----
начало файла, в котором будет отображаться форма,
формирование макроподстановки1,
вызов макроподстановки1,
формирование макроподстановки2,
вызов макроподстановки2,
продолжение тела php-файла.

макроподстановка1 должна содержать текст, описывающий содержание формы, начиная со слов "<form ...." и заканчиваться "</form>".
макроподстановка2 - текст про то какие поля куда запоминать

макроподстановка1 и макроподстановка2 - это переменные, которые должны будут автоматически заполняться ("верстаться") в соответствии со списком полей заданного сценария.
Может быть еще какие-нибудь вставки потребуются.

Вот такая идея. Хотелось бы услышать мнение, реализуема ли она. Если реализуема, то куда направить свои мозговые ресурсы в первую очередь - в смысле освония программных языков, пакетов и т.п.
Предварительный шаг я, вроде, сделал. Установил Денвер, Dreamweaver и создал простенький локальный динамический сайт с вводом и редактированием данных через форму.
Денис
Модератор

Модератор


: 42

: 21.08.2004
: 1490
: Санкт-Петербург

: 09, 2005 11:48 am     :

VT, то, что Вы описали в пункте 2 и есть уже решенный вариант Вашей проблемы. На практике он реализуется сл. образом (рассматриваю PHP):

1. В соответствии с выбранной категорией вызывается необходимый сценарий. Этого можно добиться обработкой $_POST или $_GET переменных. $_GET-переменные Вы можете увидеть, например, в URL этой страницы. Они выглядят вот так: ?t=686&highlight=

2. На странице-приемнике (т.е. на той странице, на которой будет, собственно, производиться редактирование записи) в соответствии с полученными $_GET-переменными вызывается необходимый сценарий, выводящий нужные поля из таблицы.

3. Сценарий этот работает по сл. принципу:
a) Пусть переменной рубрики будет $r, а переменной типа информации будет $i
б) Эти переменные переданы методом $_GET на страницу-приемник. Например: ...page.php?r=2&i=5
в) Сценарий принимает эти переменные и прогоняет их сквозь цикл switch или for (OldFornit, подскажите, что быстрее работает?) на предмет совпадения.
г) Каждой комбинации $r и $i соответствует переменная $fields, содержащая список полей, доступных при редактировании.
д) Эта переменная $fields подставляется в запрос, с помощью которого на странице-приемнике будет выводиться набор полей для редактирования.

Ну, вот мы и подошли к необходимой Вам конструкции:

[code:1:a00ac392a3]
<form>... Начинаем форму
switch ($_GET[r]) {... Перебираем варианты $r
case 1: ... Берем первое значение $r
switch ($_GET[i]) { ... Вложенный цикл, перебирающий значения $i
case 1: ... Берем первое значение $i
$fields='field1, field2, field3'; ... Соответствующие поля
Как вариант, можно установить $label, описывающую метки к полям
} ... Заканчиваем первый вложенный цикл
break; ... Останавливаем цикл
case 2: ... Берем второе значение $r
switch ($_GET[i]) { ... и продолжаем перебирать значения $i
...
} ... Заканчиваем вложенный цикл
break; ... Останавливаем цикл
... и продолжаем дальше
} ... Заканчиваем основной цикл
... Формируем запрос к БД
$query='SELECT '.$fields.' FROM `your_table`;';
... После того, как мы получили содержимое полей, мы выводим их на страницу так, как я описывал выше.
</form> ... Заканичиваем форму после вывода всех полей.
[/code:1:a00ac392a3]

Вот, собственно, достаточно грубый вариант решения. Взгляните сами - по-моему, мне удалось соблюсти заданную Вами структуру. Просто это был экспромт за три минуты...

Если что - всегда готов помочь.
VT
Новичок

Новичок


: 60

: 06.11.2005
: 6

: 09, 2005 5:06 pm     :

Возможно ли заменить перебор конечного и заранее известного количества вариантов рубрик и вариантов типов на поиск в таблице2 (таблице с набором вариантов сценариев, эта таблица может достаточно часто меняться), и уже из нее вынимать имена полей, загоняя их в $fields?
Денис
Модератор

Модератор


: 42

: 21.08.2004
: 1490
: Санкт-Петербург

: 09, 2005 9:22 pm     :

VT, чем меньше обращений к БД - тем лучше...
VT
Новичок

Новичок


: 60

: 06.11.2005
: 6

: 10, 2005 12:57 pm     :

Денис ():
VT, чем меньше обращений к БД - тем лучше...
Я понял, но в данном случае обращения к справочнику сценариев не миновать, поскольку предполагается, что справочники должны изготавливаться Пользователями, правда, наделенными административными полномочиями, без привлечения разработчика.
Денис
Модератор

Модератор


: 42

: 21.08.2004
: 1490
: Санкт-Петербург

: 10, 2005 4:22 pm     :

VT, а зачем лишняя морока? Отчего не использовать циклы?
VT
Новичок

Новичок


: 60

: 06.11.2005
: 6

: 10, 2005 6:58 pm     :

Может быть у меня непонимание из-за терминологии? Правильно ли я понимаю, что цикл switch - case предполагает, что на момент написания программы, как минимум, должен быть известен весь возможный набор сценариев? И разработчик вручную в case-ах все варианты должен прописать?
Если это так, тогда любое добавление или удаление рубрики или типа неизбежно влечет необходимость изменения программы. Такая ситуация в принципе допустима, если разработчик сам же является администратором базы данных и савйта. Но если Заказчик заказывает разработчику написание программы с тем, чтобы получить готовый продукт и в дальнейшем самостоятельно вести администрирование и базы, и сайта, тогда такой подход неприемлем. Никакой Заказчик на такое не пойдет, ведь он в таком случае будет подсажен на иглу. Ему постоянно придется обращаться к разработчику с ПРОСЬБОЙ выполнить очередную доработку программы. А если изменения происходят достаточно часто, то Заказчик просто будет вынужден обзавестить собственным программистом, чтобы эти изменения отслеживать в программе. Ну и еще один аспект - количесто рубрик исчисляется сотнями, а типов десятками. Если это все прописать в php-файле, и при этом не ошибиться, то сколько он будет весить?
Если же под циклом Вы понимаете сканирование справочника сценариев, тогда мы с Вами говорим об одних и теж же вещах, но разными терминами.
Денис
Модератор

Модератор


: 42

: 21.08.2004
: 1490
: Санкт-Петербург

: 10, 2005 7:06 pm     :

Признаюсь, VT, я действительно Вас не понял. Однако, если

:

количесто рубрик исчисляется сотнями, а типов десятками


то все равно надо будет создавать этот самый справочник сценариев. И кто же его будет создавать? Администратор заказчика?
VT
Новичок

Новичок


: 60

: 06.11.2005
: 6

: 10, 2005 9:46 pm     :

:

И кто же его будет создавать? Администратор заказчика?

Да, именно так работает наша программа у Заказчика на Fox-е. Если и производятся какие-то программные изменения, то они носят характер смены версии программы. А в рамках версии Администратор БД, обычный ответственный Пользователь, без знаний языков программирования, через свой вход периодически меняет справочники, т.е. редактирует в отдельных формах записи справочных таблиц. На одно изменение версии может прийтись десяток, а то и больше изменений справочников.
:   
  ,         .     ,        .     Форум Macromedia Dreamweaver -> Динамические страницы : GMT + 2
1 1

 


Powered by phpBB © 2001, 2005 phpBB Group
phpBB


/ : 136728 / 0

Rambler's Top100 @Mail.ru