Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Обработка очень большой формы
Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009
Помог: 14 раз(а)
Доброго времени суток, господа!
Возникла проблема, надеюсь на вашу помощь. Суть:
Как мне известно, не все сервера поддерживают работу с глобальными переменными. Поэтому при передаче данных из формы в обработчик я перевожу глобальные переменные в обычные, ну типа:
И в дальнейшем вношу в базу, используя уже эти обычные переменные.
Обычно этих переменных не так много и написать вышеуказанный код не так сложно, НО... столкнулся с задачей, в которой мне нужно обработать данные из 84-ёх полей и у каждого поля уникальное имя. Руки опускаются при мысли писать восемьдесят четыре раза перевод переменной из глобальной в обычную
Первая мысль была использовать foreach, но в этом случае теряеться уникальное имя переменной, посему вариант отпал. Может кто поможет решить эту проблему, а нет, то пойду мылить веревку
SAD
Отправлено: 10 Июня, 2010 - 14:26:00
Постоянный участник
Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009 Откуда: Днепропетровск, Украина
Помог: 75 раз(а)
может считать с помощью javascripta все значения и имена и без перезагрузки страницы с помощью например JSON занести все в базу. А зачем Вам нужны имена? А заносить то в базу, тоже нужно аж 168 имен написать))
Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009
Помог: 14 раз(а)
SAD пишет:
А зачем Вам нужны имена? А заносить то в базу, тоже нужно аж 168 имен написать
Я может не очень правильно объяснил. В таблице есть соответственно полям формы 84 поля. У каждого поля в базе естественно своё уникальное имя. И для того, чтобы данные из каждого поля формы "поселились" в нужной ячейке мне надо указывать это при запросе:
Чтоб еще более понятной стала задачка, то это будет таблица с родословными собак. У каждого собакевича есть свои поля: имя, инфо, дата рождения... Поэтому и форма очень большая. Надо внести пап, мам, дедушек, бабушек, всех прадедушек до определённого колена.
и все твои переменные будут доступны как PostNameParam
А вообще верно сказали, если соблюсти имена параметров, чтобы они совпадали с полями таблиц то можно все сделать в цикле. Конечно этот вариант не очень хорош если нужно делать разные проверки для разных параметров.
----- "Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог
JustUserR
Отправлено: 11 Июня, 2010 - 15:40:30
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Deonis пишет:
Первая мысль была использовать foreach, но в этом случае теряеться уникальное имя переменной
Если вас интересует именно эмуляция register_globals с сохранением имени переменной то возможен такой вариант - foreach($_REQUEST as $k=>$v) {${"$k"}=$v;}
Если же вы не хотите чтобы генерируемые таким образом переменные перемашались с переменным в вашем коде - а из-за автомазизации процесса это может произойти и к тому же это небезопасно - то используйте отдельное простнатсво имен для них Напрямую PHP не поддерживает пространства имен но с помощью имен классов и функций http://php.su/functions/?cat=runkit - можно будет использовать оператор расширения области видимости для доступа к вашим переменным
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Deonis
Отправлено: 11 Июня, 2010 - 16:27:08
Посетитель
Покинул форум
Сообщений всего: 298
Дата рег-ции: Нояб. 2009
Помог: 14 раз(а)
Спасибо всем за ответы!
Решил задачу таким образом:
Способ конечно ОЧЕНЬ далёк от идеального, но в данном моём случае лень-матушка меня победила. Уж больно меня ломало всё это дело набирать вручную. Новичкам, таким как я, не советую злоупотреблять таким способом, т.к. промахнётесь с порядком и поплывут ваши переменные, как кораблики в весеннем ручье ;)
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Deonis пишет:
Уж больно меня ломало всё это дело набирать вручную
PHP является динамическим языком и поэтому даже если набо значений находится не в массиве - то все равно можно получить список текущих переменных и обращаться к ним по именам в кавычках
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Joo
Отправлено: 11 Июня, 2010 - 17:52:11
Гость
Покинул форум
Сообщений всего: 99
Дата рег-ции: Нояб. 2009 Откуда: Казахстан
Помог: 1 раз(а)
JustUserR пишет:
{${"$k"}=$v;}
Даже не знал, что можно так к переменной обратиться. Спасибо!
----- "Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог
JustUserR
Отправлено: 13 Июня, 2010 - 12:31:17
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Joo пишет:
Даже не знал, что можно так к переменной обратиться. Спасибо!
Пожалуйста! В PHP такой стособ является вовсе не единственным способом динамической работы с переменными - например за счет функций http://php.su/functions/?cat=runkit можно работать с переменными и константами в определнном пространстве имен - которая реализуется за счет имени класса и оператора расширения области видимости Также за счет этих функций можно создавать новые суперглобальные переменные и оперировать с текущим их списком
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Champion
Отправлено: 13 Июня, 2010 - 12:35:45
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Joo пишет:
{${"$k"}=$v;}
Даже не знал, что можно так к переменной обратиться
Можно и $$k = $v. Во как (Добавление)
И функции можно вызывать
function fu($a) {echo $a;}
$f = 'fu';
$f(345); // выведет 345
Joo
Отправлено: 13 Июня, 2010 - 14:17:00
Гость
Покинул форум
Сообщений всего: 99
Дата рег-ции: Нояб. 2009 Откуда: Казахстан
Помог: 1 раз(а)
Champion пишет:
И функции можно вызывать
function fu($a) {echo $a;}
$f = 'fu';
$f(345); // выведет 345
А про функции знал, и в ряде случаев пользовался.
----- "Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог
JustUserR
Отправлено: 14 Июня, 2010 - 11:56:16
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Champion пишет:
Можно и $$k = $v. Во как
Еще как можно и даже короче и удобнее в записи - но при использовании фигурных скобок можно указать в кавычках базовое имя переменной и конкатенировать его со счетчиком - и таком образом работать с группой переменных $vr_i как с массивом
А использование функций runkit все-таки хорошо тем что позволят работать с областями видимости для переменных - и создавать собственные области видимости за счет классов и оператора расширенния пространства имен Это удобно поскольку по умолчанию в PHP есть только глобальные и локальные переменные - в Perl похожая ситуция если смотреть напрямую но там можно делать встроенные в Perl-скрипт пакеты которые и являются по сути именованными/неименованными областями видимости - в в PHP можно указать набор пустых для каждого пространства имен и далее работать с ними посредством runkit - причем имена всех объектов могут записываться в кавычках что позволяет делать жесткую передачу по ссылке
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.