Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [HTML Forms]Формы и метод GET (http://forum.oszone.net/showthread.php?t=75090)

vadimiron 23-11-2006 14:45 515962

[HTML Forms]Формы и метод GET
 
возможно это давно всем известно, но я первый раз с этим сталкиваюсь:

Если в форме используем метод GET для передачи данных, то параметры GET URL-a скрипта-получателя (то есть то, что в action стоит) просто стераются
Пример:
HTML код:

<form action='script.php?modus=save_message' method='GET'>
<input name='var1'>
</form>

Так вот скрипт script.php получит $var1, но вот $modus уже не получит
С POST всё в порядке.

Я не понимаю логику за этим: нельзя дальнейшии GET переменные на URL навешeвать?
Или может браузер глупый (IE7)

Или я чего то не понимаю.....

XCodeR 23-11-2006 16:05 516020

vadimiron
а зачем так сложно?
почему нельзя использовать просто hidden-поля?

Coutty 23-11-2006 18:43 516104

У меня этот метод работал. Может стоит попробовать принять переменную как $_GET['modus'] ?

vadimiron 23-11-2006 19:33 516126

Coutty
Я так и принимаю и никак по другому

XCodeR
Приходиться так и делать, я просто хочу понять логику, что мешает браузеру в запрос просто навесить дополнительные переменные

Почему я так делаю: у приложения модульная структура, то есть переменная $modus отвечает за то, какой скрипт загрузиться
Чтобы не прописывать всё время руками УРЛ с соответствующим модулем я в управляющем скрипте создаю константу MAIN_URL и применяю её везде


Кстати такой же эффект, если я ничего в action не напишу
При ПОСТе переменные передаются, при ГЕТе нет

Prisoner 24-11-2006 20:18 516586

vadimiron, а в иных броузерах нормально все?
Кстати, может поглядеть в иные суперглобалы, вроде _REQUEST?

vadimiron 24-11-2006 23:37 516686

Prisoner
в FireFox тоже не работает. REQUEST тоже нет - это же всего соединение двух массивов

Код для проверки:
PHP код:

echo "<form action='test.php?var_get=lala' method='GET'>";

echo 
"<input name=var_post>";

echo 
"</form>";

echo 
"<br><br>";

if(!empty(
$_POST) || !empty($_GET))
{
  echo 
"<pre>";
  echo 
"POST: ";print_r($_POST);
  echo 
"GET: ";print_r($_GET);
  echo 
"REQUEST: ";print_r($_REQUEST);



Может что то связанное с безопастностью..... :wacko:

Prisoner 25-11-2006 00:01 516698

vadimiron, объединение, верно, однако самому проверить так ли это в этой ситуации (привычка верить во всякие глупости :)) в тот момент у меня не было возможности, потому и спросил. Ну да ладно. У меня тоже не работает :). Сейчас проверил во всех броузерах что под рукой были - одно поведение: удаление переменной из action. Остается только объяснить это поведение и смириться, задействовав hidden поля. Объяснение же может быть следующим (лень копать соответствующие RFC) т.к. метод у нас GET, то ПА генерирует состояние формы в тот же поток где у нас стоит наше "modus=save_message" затирая все то, что там было до нас. POST же так не поступает посколько состояние формы идет иным потоком. Как итог - юзать hidden поля и мириться с двойными (_GET и _POST, из action и hidden полей, соответственно) переменными.


Время: 06:00.

Время: 06:00.
© OSzone.net 2001-