Модераторы: Illuminaty
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отправка данных неогранниченного количество форм 
V
    Опции темы
SkyCoder
  Дата 2.3.2008, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичёк
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 26.6.2006
Где: 3-я планета от со лнца

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



Что имеем: 

html странницу(сгенерённую php скриптом), представляющуюю собой список форм вида:
Код

<Form Action='update.php' Method=GET>
    Id:261<Input name='id' type='hidden' value='261'>
    Name:<Input name='name' type='text' size=14 value='Планка ОЗУ'>
    Descr:<Input name='descr' type='text' size=14 value='SIMM 72 pin'>
    Next:<Input name='next' type='text' size=4 value='260'>
    Prev:<Input name='prev' type='text' size=4 value='60'>
    Inn:<Input name='inp' type='text' size=4 value='0'> 
    Out:<Input name='out' type='text' size=4 value='59'>
    <Input type='submit' Name='CMD' VALUE='OPEN'>
    <Input type='submit' Name='CMD' VALUE='UPDATE'>
    <Input type='submit' Name='CMD' VALUE='DELETE'> 
</Form>

user posted image

Как видите, эта форма представляет собой отображение  данных одной записи некой таблицы в некой базе данных. Кнопка OPEN - "открывает" объект, кнопка UPDATE - вносит изменения, кнопка DELETE стерает его из базы данных.
И таких форм у нас неограничено много.

Чего мне не хватает для счастья:

Хочу Ещё одну кнопочку типа "UPDATE ALL" внизу страницу позволяющую изменять данные сразу в нескольких запписях.

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

И какие пути реализации могли вы предложить?(Надеюсь, господа Модераторы не посчитают это вторым вопросом smile )
PM MAIL   Вверх
ilyaILF
Дата 2.3.2008, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



В одну объединить, на сколько я знаю, нельзя, хотя бы из-за соображений, что параметр у формы action может быть только один. Но можно создать (собрать) массив из всех, присутствующих на странице форм (form[]) и делать с ними все, что заблагорассудится - http://www.w3schools.com/htmldom/dom_obj_document.asp. Если же менять параметры в динамическом режиме, то дело здесь не обойдется без AJAX .
PM MAIL   Вверх
Itsys
Дата 3.3.2008, 07:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

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



Ты скрипт PHP переделать можешь?
PM MAIL WWW Skype   Вверх
SkyCoder
Дата 3.3.2008, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичёк
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 26.6.2006
Где: 3-я планета от со лнца

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



Конечно могу smile 
PM MAIL   Вверх
bars80080
Дата 3.3.2008, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



тогда сделать как предлагал ilyaILF не составит труда

идея скажем такая:
Код

Name:<Input name='name184' type='text' size=14 value='Планка ОЗУ'>
    Descr:<Input name='descr184' type='text' size=14 value='SIMM 72 pin'>
...
Name:<Input name='name250' type='text' size=14 value='Планка ОЗУ'>
    Descr:<Input name='descr250' type='text' size=14 value='SIMM 72 pin'>


называем элементы в соответствии с их id, потом на сервере обработка загон всех строчек в БД
PM MAIL WWW   Вверх
SelenIT
Дата 3.3.2008, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



Форма в любом случае должна быть одна, это, надеюсь, очевидно.

А поля для данной структуры я бы предложил называть так, чтобы на сервере можно было проходить по ним, как по массиву - я бы предложил такое:
Код

<Form Action='update.php' Method="POST">
<fieldset><legend>Первый элемент</legend>
    Id:261<Input name='obj[261][id]' type='hidden' value='261'><!-- это поле по сути не нужно - ID у нас уже есть :) -->
    Name:<Input name='obj[261][name]' type='text' size=14 value='Планка ОЗУ'>
    Descr:<Input name='obj[261][descr]' type='text' size=14 value='SIMM 72 pin'>
    Next:<Input name='obj[261][next]' type='text' size=4 value='260'>
    Prev:<Input name='obj[261][prev]' type='text' size=4 value='0'>
    Inn:<Input name='obj[261][inp]' type='text' size=4 value='0'> 
    Out:<Input name='obj[261][out]' type='text' size=4 value='59'>
    <Input type='submit' Name='CMD' VALUE='OPEN[261]'>
    <Input type='submit' Name='CMD' VALUE='UPDATE[261]'>
    <Input type='submit' Name='CMD' VALUE='DELETE[261]'>
</fieldset>
<fieldset><legend>Второй элемент</legend>
     Id:260<Input name='obj[260][id]' type='hidden' value='260'><!-- соответственно, тоже можно убрать -->
    Name:<Input name='obj[260][name]' type='text' size=14 value='Другая планка ОЗУ'>
    Descr:<Input name='obj[260][descr]' type='text' size=14 value='DDR II'>
    Next:<Input name='obj[260][next]' type='text' size=4 value='0'>
    Prev:<Input name='obj[260][prev]' type='text' size=4 value='261'>
    Inn:<Input name='obj[260][inp]' type='text' size=4 value='0'> 
    Out:<Input name='obj[260][out]' type='text' size=4 value='59'>
    <Input type='submit' Name='CMD' VALUE='OPEN[260]'>
    <Input type='submit' Name='CMD' VALUE='UPDATE[260]'>
    <Input type='submit' Name='CMD' VALUE='DELETE[260]'>
</fieldset>
<Input type='submit' Name='CMD' VALUE='UPDATE ALL'>
</Form>


Тогда при нажатии UPDATE ALL можно будет легко пробежаться по $_POST['obj'], и для каждого его элемента вызвать стандартную процедуру обновления (как и для единичного объекта). Если же $_POST['CMD'] является массивом с единственным значением - проапдейтить (удалить) следует лишь объект с соответствующим ID.

Почему форма, вносящая изменения в БД, должна иметь тип POST, а не GET, надеюсь, объяснять не надо?

Это сообщение отредактировал(а) SelenIT - 3.3.2008, 18:47


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
SkyCoder
  Дата 3.3.2008, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичёк
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 26.6.2006
Где: 3-я планета от со лнца

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



ilyaILF,
Проэкту ещё рано быть AJAX-приложением. На тему использования Jawascript  - подумаем smile .

bars80080,

Я думал о таков варианте, но смущают вопросы обработки имен переменных

SelenIT,

Всё таки, после С++ под x86, php (под php5_module? smile )  воспринимаешь не так как стоило бы.
Я бы просто не додумался) - пойду снова штудировать основы php.

GET использовал лишь потому что не использовал POST - на данном этапе всё происходи на локальной машине и причин, подталкивающих к использованию POST, я к сожалению smile  не вижу.

Id использовался для работы кнопки OPEN, и кажется он не отомрёт. Дело в том что на странице присутсвует список элементов не с полным набором id. Перебирать массив по id - неудобно.

Вероятно результат будет выглядеть так:

Код

<Form Action='update.php' Method="POST">
<fieldset><legend>Первый элемент</legend>
    Id:261<Input name='obj[1][id]' type='hidden' value='261'>
    Name:<Input name='obj[1][name]' type='text' size=14 value='Планка ОЗУ'>
    Descr:<Input name='obj[1][descr]' type='text' size=14 value='SIMM 72 pin'>
    Next:<Input name='obj[1][next]' type='text' size=4 value='260'>
    Prev:<Input name='obj[1][prev]' type='text' size=4 value='0'>
    Inn:<Input name='obj[1][inp]' type='text' size=4 value='0'> 
    Out:<Input name='obj[1][out]' type='text' size=4 value='59'>
    <Input type='submit' Name='CMD[1]' VALUE='OPEN'>
    <Input type='submit' Name='CMD[1]' VALUE='UPDATE'>
    <Input type='submit' Name='CMD[1]' VALUE='DELETE'>
</fieldset>
<fieldset><legend>Второй элемент</legend>
     Id:260<Input name='obj[2][id]' type='hidden' value='260'>
    Name:<Input name='obj[2][name]' type='text' size=14 value='Другая планка ОЗУ'>
    Descr:<Input name='obj[2][descr]' type='text' size=14 value='DDR II'>
    Next:<Input name='obj[2][next]' type='text' size=4 value='0'>
    Prev:<Input name='obj[2][prev]' type='text' size=4 value='261'>
    Inn:<Input name='obj[2][inp]' type='text' size=4 value='0'> 
    Out:<Input name='obj[2][out]' type='text' size=4 value='59'>
    <Input type='submit' Name='CMD[2]' VALUE='OPEN'>
    <Input type='submit' Name='CMD[2]' VALUE='UPDATE'>
    <Input type='submit' Name='CMD[2]' VALUE='DELETE'>
</fieldset>
<Input type='submit' Name='CMD[0]' VALUE='UPDATE ALL'>
</Form>


Над выбором между
Код

    <Input type='submit' Name='CMD[2]' VALUE='OPEN'>
    <Input type='submit' Name='CMD' VALUE='OPEN[2]'>

ещё подумаю.

Спасибо, конкретно SelenIT и всем остальным не в меньшей степени.

PM MAIL   Вверх
SelenIT
Дата 3.3.2008, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



Цитата(SkyCoder @  3.3.2008,  21:24 Найти цитируемый пост)
Id использовался для работы кнопки OPEN, и кажется он не отомрёт.

Конечно не отомрет - он просто "перекочевал" в индекс каждого поля, относящегося к соотв. объекту... ;)

Цитата(SkyCoder @  3.3.2008,  21:24 Найти цитируемый пост)
Перебирать массив по id - неудобно.

С каких пор foreach стал неудобным? По-моему - самое то...

Цитата(SkyCoder @  3.3.2008,  21:24 Найти цитируемый пост)
и причин, подталкивающих к использованию POST, я к сожалению smile  не вижу.

GET-запрос - это ссылка, ссылки имеют обыкновение кешироваться (в проксях, в history браузеров...), кто-нибудь (юзер или прога) может попытаться загрузить ссылку еще раз... например, на UPDATE всех полей полугодовой давности smile. Не говоря о том, что GET гарантированно может передавать не более 2047 байт (в IE, а через некоторые прокси - и того меньше), обновление всех объектов в этот лимит вряд ли втиснется...

Добавлено @ 21:46
Цитата(SkyCoder @  3.3.2008,  21:24 Найти цитируемый пост)
Над выбором между
Код

    <Input type='submit' Name='CMD[2]' VALUE='OPEN'>
    <Input type='submit' Name='CMD' VALUE='OPEN[2]'>

ещё подумаю.

Имхо, проверять значение заведомо известной переменной все же проще, чем писать кучу if-ов для ловли неизвестной... но решай сам smile

Это сообщение отредактировал(а) SelenIT - 3.3.2008, 21:48


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
SkyCoder
  Дата 3.3.2008, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичёк
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 26.6.2006
Где: 3-я планета от со лнца

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



Спасиб ещё раз, продолжаю психологический переход на php)

PM MAIL   Вверх
bars80080
Дата 4.3.2008, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



суть конечно у SelenIT, серьёзней
Цитата
bars80080,
Я думал о таков варианте, но смущают вопросы обработки имен переменных

но никаких проблем априори возникнуть не может /для примера с именами name250/

при обработке массива $_POST:
Код

$num = 250; // число полей, скажем взяли из БД
for($i = 0; $i < $num; $i++) {
$a = 'name'.$i;
if(empty($_POST[$$a])) $$a = ''; else $$a = HtmlSpecialChars($_POST[$$a]);
}

но это простой пример на пальцах, там вроде как есть функции сразу создающие имена переменных
если не хочется перебирать весь массив, можно закинуть либо в сессию, либо в скрытое поле формы номера возможных записей
PM MAIL WWW   Вверх
SelenIT
Дата 4.3.2008, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



Цитата(bars80080 @  4.3.2008,  10:19 Найти цитируемый пост)
закинуть либо в сессию, либо в скрытое поле формы номера возможных записей


bars80080, имхо, некрасиво и искусственно это как-то. К тому же по смыслу тут у нас именно массив объектов (асс. массивов), PHP предоставляет средства работы с таковым - почему бы не заюзать их напрямую? Вариант с параллельными массивами (name[250] - out[250] и т.д. для каждого имени поля) тоже допустим, но, имхо, массив ассоциативных массивов удобнее - с ним можно единообразно (одной процедурой) обрабатывать как единичный, так и множественный апдейт (соответственно, без цикла и в цикле foreach по id), с параллельными же массивами понадобится как минимум дополнительная проверка соответствий...

Это сообщение отредактировал(а) SelenIT - 4.3.2008, 12:33


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
bars80080
Дата 4.3.2008, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



да нет, это я ответил на ремарку SkyCoderа, что его смущает процесс обработки

понятно, что твой вариант удобнее, просто почему с каких-то пор (наверно, когда ещё много чего не получалось) я не люблю массивные имена и потому их не использовал
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Вёрстка веб-сайтов | Следующая тема »


 




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


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

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