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

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Проблема с передачей переменных методом GET
evgenijj
Отправлено: 25 Августа, 2006 - 15:35:08
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Столкнулся с проблемой, и так и не смог с ней разобраться.
CODE (text):
скопировать код в буфер обмена
  1.  
  2. <?
  3. if ( !isset($_GET["test"]) )
  4. {
  5. echo "<form name='frm' action='".$_SERVER["PHP_SELF"]."?action=action'
  6. method='GET'>";
  7. echo "<input type='text' name='test' value='test'>";
  8. echo "<input type='submit' value='Go!'>";
  9. echo "</form>";
  10. }
  11. else
  12. {
  13. echo "<p>Переменная action=".$_GET["action"]."</p>";
  14. echo "<p>Переменная test=".$_GET["test"]."</p>";
  15. }
  16. ?>
  17.  

После нажатия кнопки "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"> не давать. Мне интересно знать ПОЧЕМУ, а не как обойти проблему.
 
 Top
Tim
Отправлено: 25 Августа, 2006 - 21:53:07
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Авг. 2006  


Помог: 0 раз(а)




потому что броузер обрезает action=action
 
 Top
evgenijj
Отправлено: 25 Августа, 2006 - 22:13:55
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Tim пишет:
потому что броузер обрезает action=action

А можно чуть-чуть поподробнее? Я понимаю, что action=action обрезается. Но ПОЧЕМУ? Я пробовал передавать переменные формы методом POST, при этом в атрибуте action тега form прописывл action='test.php?action=action' -- и получал в в скрипте переменные $GET["action"] и $_POST["test"]. Но прописать одновременно две переменные, передаваемые GET - одна в строке URL, а другая в элементе <input ... > -- не получается.
 
 Top
f0rm4t
Отправлено: 26 Августа, 2006 - 02:41:13
Post Id



Посетитель


Покинул форум
Сообщений всего: 433
Дата рег-ции: Июнь 2006  


Помог: -1 раз(а)




Ну наверное так можно передавать только методом POST.
 
 Top
valenok Модератор
Отправлено: 26 Августа, 2006 - 15:55:34
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




PHP:
скопировать код в буфер обмена
  1. <?
  2. if ( !isset($_GET["test"]) )
  3. {
  4. echo "<form name='frm' action='".$_SERVER["PHP_SELF"]."' method='GET'>";
  5. echo "<Input type='hidden' name='action' value='action'>";
  6. echo "<input type='text' name='test' value='test'>";
  7. echo "<input type='submit' value='Go!'>";
  8. echo "</form>";
  9. }
  10. else
  11. {
  12. echo "<p>Переменная action=".$_GET["action"]."</p>";
  13. echo "<p>Переменная test=".$_GET["test"]."</p>";
  14. }


-----
Truly yours, Sasha.
 
My status
 Top
ARTY
Отправлено: 26 Августа, 2006 - 17:34:44
Post Id



Почетный посетитель


Покинул форум
Сообщений всего: 238
Дата рег-ции: Июнь 2006  


Помог: -2 раз(а)




Рекомендую такой метод:

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. if (!isset($_POST['test']))
  4. {
  5. echo '<form name="frm" action="'.$_SERVER['PHP_SELF'].'" method="POST">';
  6. echo '<input type="hidden" name="action" value="action">';
  7. echo '<input type="text" name="test" value="test">';
  8. echo '<input type="submit" value="Go!">';
  9. echo '</form>';
  10. }
  11. else
  12. {
  13. echo "\n\nПеременная action=".@$_POST["action"]."</p>";
  14. echo "\n\nПеременная test=".@$_POST["test"]."</p>";
  15. }
  16. ?>
  17.  


Если нужно использовать именно метод GET, то аналогично, только поменяй POST на GET и всё Улыбка
 
 Top
valenok Модератор
Отправлено: 26 Августа, 2006 - 18:50:43
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




поменяй Get на Post и припиши обратно:
action="'.$_SERVER['PHP_SELF'].'"?action=action

И убери скрытое поле, иначе
адресс: script.php?action=action
не получится

И надо не отключать вывод ошибок а делать так чтоб ошибки не появлялись..


-----
Truly yours, Sasha.
 
My status
 Top
evgenijj
Отправлено: 27 Августа, 2006 - 17:01:42
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Полагаю, что нашел ответ на свой вопрос. Из спецификации HTML:

* get: методом "get" HTTP набор данных формы присоединяется к URI, определённому атрибутом action (со знаком "?" в качестве разделителя), и этот новый URI высылается программе-обработчику.
* post: методом "post" HTTP набор данных формы включается в тело формы и высылается программе-обработчику.

Другими словами, в изложенном мной случае имеет место следующая ситуация

test.php?action=action?test=test

При разборе такой неоднозначной ситуации значащим считается второй знак "?" и именно пары var=value, указанные после второго "?" становятся доступными внутри скрипта.

Тему можно считать закрытой. Спасибо всем, кто принял участие в обсуждении.
 
 Top
valenok Модератор
Отправлено: 28 Августа, 2006 - 10:41:25
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 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.
 
My status
 Top
evgenijj
Отправлено: 28 Августа, 2006 - 19:25:25
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Мы все дальше отклоняемся от темы . Вопрос изначально стоял так: можно ли при передаче методом GET переменных из формы часть из них передать в атрибуте action элемента form, а часть - через элементы input формы. Т.е.
CODE (text):
скопировать код в буфер обмена
  1.  
  2. <?
  3. if ( !isset($_GET["var3"]) )
  4. {
  5.   echo "<form name='frm' action='".$_SERVER["PHP_SELF"]."?var1=value1&var2=value2'
  6.   method='GET'>";
  7.   echo "<input type='text' name='var3' value='value3'>";
  8.   echo "<input type='text' name='var4' value='value4'>";
  9.   echo "<input type='submit' value='Go!'>";
  10.   echo "</form>";
  11. }
  12. else
  13. {
  14.   echo "<p>Переменная var1=".$_GET["var1"]."</p>";
  15.   echo "<p>Переменная var2=".$_GET["var2"]."</p>";
  16.   echo "<p>Переменная var3=".$_GET["var3"]."</p>";
  17.   echo "<p>Переменная var4=".$_GET["var4"]."</p>";
  18. }
  19. ?>
  20.  

До того, как я столкнулся с этой проблемой, я полагал, что после отправки формы скрипту будут доступны четыре переменные var1, var2, var3, var4, переданные методом GET, т.е.
test.php?var1=value1&var2=value2&var3=value3&var4=value4

Несложный эксперимент показал, что это не так:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. Notice: Undefined index: var1 in D:worklocalhost8wwwtest.php on line 13
  3. Переменная var1=
  4. Notice: Undefined index: var2 in D:worklocalhost8wwwtest.php on line 14
  5. Переменная var2=
  6. Переменная var3=value3
  7. Переменная var4=value4
  8.  


Такой вопрос не мог меня не заинтересовать -- а ПОЧЕМУ, собственно?

Логика подсказывает, что перед отправкой формы браузер отсекает подстроку "?var1=value1&var2=value2" в атрибуте action тега form и уже после этого добавляет к имени скрипта подстроку "?var3=value3&var4=value4".
 
 Top
valenok Модератор
Отправлено: 29 Августа, 2006 - 13:36:40
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




Ответ: Нет.\n\n(Добавление)
Скорее он не совсем нарочно отсекает. Скорее он просто заменяет.


-----
Truly yours, Sasha.
 
My status
 Top
Suhoij
Отправлено: 17 Августа, 2010 - 14:03:21
Post Id


Новичок


Покинул форум
Сообщений всего: 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.


Ссылка на спецификацию: http://www[dot]w3[dot]org/TR/1999/REC-ht[dot][dot][dot]ml#submit-format

Так что после action.php?var1&var2 подставляется еще один знак вопроса action.php?var1&var2?var3&var4 что приводит к тому что браузер обрезает первые два и оставляет последние.
 
 Top
JustUserR
Отправлено: 17 Августа, 2010 - 21:31:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Suhoij пишет:
Вы правы в соответствие с w3c спецификацией для html4
Открытая вами тема скорее всего уже потеряла свою актуальность по прошествии нескольких лет - тем не менее для определения исходной проблемы можно было посмотреть содержимое переменной окружения QUERY_STRING - или же посмотреть содержимое передаваемого запроса в реальном времени ли предварительно с помощью JS-скрипта
PS Тему закрываю в связи с правилами форума - и ваше сообщение отделить в отдельную ветку не могу
Тема закрыта!


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB