Проблемы с передачей параметров методом GET

evgenijj

Новичок
Проблемы с передачей параметров методом GET

Столкнулся тут с одной проблемой, и никак не могу с ней разобраться.
<?
if ( !isset($_GET["test"]) )
{
echo "<form name='frm' action='".$_SERVER["PHP_SELF"]."?action=action' method='GET'>";
echo "<input type='text' name='test' value='test'>";
echo "<input type='submit' value='Go!'>";
echo "</form>";
}
else
{
echo "Переменная action=".$_GET["action"]."<br>";
echo "Переменная test=".$_GET["test"]."<br>";
}
?>

После нажатия кнопки "Go!" получаю

Notice: Undefined index: action in D:\work\localhost8\www\test.php on line 11
Переменная action=
Переменная test=test

Получается, что при передаче параметров методом GET я не могу передать еще какое-то количество переменных, прописав их в виде script.php?var1=value1&var2=value2 и т.д. и т.п. А почему?

Убедительня просьба советов поменять метод GET на метод POST или создать внутри формы дополнительный элемент <input type="hidden" name="action" value="action"> не давать. Мне интересно знать ПОЧЕМУ, а не как обойти проблему.
 

evgenijj

Новичок
Автор оригинала: Popoff
<input type="hidden" name="action" value="action" />
Это был ответ? Вы полагаете, что использование XHTML вместо HTML может исправить ситуацию? Я даже проверять это не буду.
 

Popoff

popoff.donetsk.ua
evgenijj
Специально для Вас, не любящего ХHTML, повторяю вариант на HTML:

<input type="hidden" name="action" value="action">
 

evgenijj

Новичок
Автор оригинала: WP
А зря.
Вроде бы оба по-русски говорим - но друг друга не понимаем. Я просил не присылать мне ответов КАК ОБОЙТИ ЭТУ ПРОБЛЕМУ:

Убедительня просьба советов поменять метод GET на метод POST или создать внутри формы дополнительный элемент <input type="hidden" name="action" value="action"> не давать. Мне интересно знать ПОЧЕМУ, а не как обойти проблему.

Создание внутри формы дополнительного элемента <input type="hidden" name="action" value="action"> решает проблему. Так же как и изменение способа передачи данных -- с GET на POST. Для этого даже нет необходимости переходить c HTML на XHTML.

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

evgenijj

Новичок
Из ваших отвеов я понял, что НЕЛЬЗЯ так делать: пытатся передать часть данных через URL в атрибуте action элемента form, а часть -- через элементы <input ...>. Было бы просто замечательно, если бы вы (WP и Popoff) дали ссылку на достоверный источник, где бы это было прописано.

Вольные ответы типа "Выучи HTML и будет тебе счастье" нельзя принимать серьезно.

Предыдущие ответы и того хуже -- поставь закравающий слэш внутри элемента input -- и будет тебе счастье.
 

Igor aka TiGR

Новичок
Из ваших отвеов я понял, что НЕЛЬЗЯ так делать: пытатся передать часть данных через URL в атрибуте action элемента form, а часть -- через элементы <input ...>.
Можно. Но только если используется POST method.
 

evgenijj

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

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

test.php?action=action?test=test

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

evgenijj

Новичок
Странный ворос -- именно это я и пытался понять: почему в скрипте недоступна переменная action, которая передается путем прописывания ее в URL атрибута action тега form.

Впрочем, я полагаю, тему можно закрыть -- я для себя все выяснил. Мой последний вопрос был риторический -- он содержал в себе и ответ. Спасибо всем, кто принял участие в обсуждении этой проблемы: WP, Popoff, SelenIT - чей ответ и послужил ключом к разгадке, Igor aka TiGR.
 
Сверху