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 :: Передача переменных методом GET
После нажатия кнопки "Go!" получаю
Notice: Undefined index: action in D:/work/localhost8/www/test.php on line 11
Переменная action=
Переменная test=test
А почему? Что-то идеологически неверно?
Просьба советов поменять метод GET на метод POST или создать внутри формы дополнительный элемент <input type="hidden" name="action" value="action"> не давать. Мне интересно знать ПОЧЕМУ, а не как обойти проблему.
Покинул форум
Сообщений всего: 1
Дата рег-ции: Авг. 2006
Помог: 0 раз(а)
потому что броузер обрезает action=action
evgenijj
Отправлено: 25 Августа, 2006 - 22:13:55
Участник
Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006 Откуда: Москва
Помог: 10 раз(а)
Tim пишет:
потому что броузер обрезает action=action
А можно чуть-чуть поподробнее? Я понимаю, что action=action обрезается. Но ПОЧЕМУ? Я пробовал передавать переменные формы методом POST, при этом в атрибуте action тега form прописывл action='test.php?action=action' -- и получал в в скрипте переменные $GET["action"] и $_POST["test"]. Но прописать одновременно две переменные, передаваемые GET - одна в строке URL, а другая в элементе <input ... > -- не получается.
Если нужно использовать именно метод GET, то аналогично, только поменяй POST на GET и всё
valenok
Отправлено: 26 Августа, 2006 - 18:50:43
Здесь могла бы быть ваша реклама
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006 Откуда: Israel
Помог: 3 раз(а)
поменяй Get на Post и припиши обратно:
action="'.$_SERVER['PHP_SELF'].'"?action=action
И убери скрытое поле, иначе
адресс: script.php?action=action
не получится
И надо не отключать вывод ошибок а делать так чтоб ошибки не появлялись..
----- Truly yours, Sasha.
evgenijj
Отправлено: 27 Августа, 2006 - 17:01:42
Участник
Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006 Откуда: Москва
Помог: 10 раз(а)
Полагаю, что нашел ответ на свой вопрос. Из спецификации HTML:
* get: методом "get" HTTP набор данных формы присоединяется к URI, определённому атрибутом action (со знаком "?" в качестве разделителя), и этот новый URI высылается программе-обработчику.
* post: методом "post" HTTP набор данных формы включается в тело формы и высылается программе-обработчику.
Другими словами, в изложенном мной случае имеет место следующая ситуация
test.php?action=action?test=test
При разборе такой неоднозначной ситуации значащим считается второй знак "?" и именно пары var=value, указанные после второго "?" становятся доступными внутри скрипта.
Тему можно считать закрытой. Спасибо всем, кто принял участие в обсуждении.
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006 Откуда: Israel
Помог: 3 раз(а)
Нет..
Второго знака вопроса нет..
Первый отделяет адресс от параметров, а параметры отделяются между собой знаками &
ТОесть так:
script.php?action=action&name=Sasha&nick=valenok&abc=def
Тоесть параметры которые мы передаём скрипту script.php
это:
action = "action"
name = "Sasha"
nick = "valenok"
abc = "def"
----- Truly yours, Sasha.
evgenijj
Отправлено: 28 Августа, 2006 - 19:25:25
Участник
Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006 Откуда: Москва
Помог: 10 раз(а)
Мы все дальше отклоняемся от темы . Вопрос изначально стоял так: можно ли при передаче методом GET переменных из формы часть из них передать в атрибуте action элемента form, а часть - через элементы input формы. Т.е.
До того, как я столкнулся с этой проблемой, я полагал, что после отправки формы скрипту будут доступны четыре переменные var1, var2, var3, var4, переданные методом GET, т.е.
test.php?var1=value1&var2=value2&var3=value3&var4=value4
Notice: Undefined index: var1 in D:worklocalhost8wwwtest.php on line 13
Переменная var1=
Notice: Undefined index: var2 in D:worklocalhost8wwwtest.php on line 14
Переменная var2=
Переменная var3=value3
Переменная var4=value4
Такой вопрос не мог меня не заинтересовать -- а ПОЧЕМУ, собственно?
Логика подсказывает, что перед отправкой формы браузер отсекает подстроку "?var1=value1&var2=value2" в атрибуте action тега form и уже после этого добавляет к имени скрипта подстроку "?var3=value3&var4=value4".
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006 Откуда: Israel
Помог: 3 раз(а)
Ответ: Нет.\n\n(Добавление)
Скорее он не совсем нарочно отсекает. Скорее он просто заменяет.
----- Truly yours, Sasha.
Suhoij
Отправлено: 17 Августа, 2010 - 14:03:21
Новичок
Покинул форум
Сообщений всего: 1
Дата рег-ции: Авг. 2010
Помог: 0 раз(а)
Evgenijj, вы правы в соответствие с w3c спецификацией для html4
Цитата:
17.13.1 Form submission method
The method attribute of the FORM element specifies the HTTP method used to send the form to the processing agent. This attribute may take two values:
* get: With the HTTP "get" method, the form data set is appended to the URI specified by the action attribute (with a question-mark ("?") as separator) and this new URI is sent to the processing agent.
* post: With the HTTP "post" method, the form data set is included in the body of the form and sent to the processing agent.
The "get" method should be used when the form is idempotent (i.e., causes no side-effects). Many database searches have no visible side-effects and make ideal applications for the "get" method.
If the service associated with the processing of a form causes side effects (for example, if the form modifies a database or subscription to a service), the "post" method should be used.
Так что после action.php?var1&var2 подставляется еще один знак вопроса action.php?var1&var2?var3&var4 что приводит к тому что браузер обрезает первые два и оставляет последние.
JustUserR
Отправлено: 17 Августа, 2010 - 21:31:33
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Suhoij пишет:
Вы правы в соответствие с w3c спецификацией для html4
Открытая вами тема скорее всего уже потеряла свою актуальность по прошествии нескольких лет - тем не менее для определения исходной проблемы можно было посмотреть содержимое переменной окружения QUERY_STRING - или же посмотреть содержимое передаваемого запроса в реальном времени ли предварительно с помощью JS-скрипта
PS Тему закрываю в связи с правилами форума - и ваше сообщение отделить в отдельную ветку не могу
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.