Не могу понять работу isset

iden

Новичок
Не могу понять работу isset

Взялся изучать php и сразу в тупик... Возьмем такой код:
PHP:
if (isset($_GET["name"])) echo "Value=".$_GET["name"]; else echo "Not isset";
Не могу понять, почему эта проверка принимает true, если поле name в форме не заполнено. Скрипт тестирую на localhost под Денвером сборки Denwer3_Base_2008-01-13_a2.2.4_p5.2.4_m5.0.45_pma2.6.1 на WinXP. Толи я чего не понимаю, толь настройка хитрая затаилась. Объясните, пожалуйста.
 

Духовность™

Продвинутый новичок
Потому, что надо ман внимательно читать. isset проверяет, объявлена ли такая переменная. А она у тебя объявлена (судя по всему) и содержит пустую строку - значение из формы. А пустая строка - это значение.

В твоем случае надо воспользоваться функцией empty

http://ru.php.net/manual/ru/function.isset.php
http://ru.php.net/manual/ru/function.empty.php
 

tony2001

TeaM PHPClub
>Не могу понять, почему эта проверка принимает true, если поле name в форме не заполнено.

если поле не заполнено, то оно всё равно присутствует, хотя его значение - пустая строка.
см. [m]isset[/m] vs [m]empty[/m].
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
[m]types.comparisons[/m]
 

iden

Новичок
Теоретически с isset и empty уже разобрался, в мануалах пока ничего нового для себя не увидел по данному вопросу. Спасибо всем за отклик. Напрашивается другой вопрос. Объясните, пожалуйста, если из формы отправляем незаполненные поля, они в любом случае попадут в строку запроса вида "параметр=значение"?
 

Фанат

oncle terrible
Команда форума
в мануалах пока ничего нового для себя не увидел
странно. если не увидел ничего нового, то почему задавал вопрос
сли из формы отправляем незаполненные поля, они в любом случае попадут в строку запроса вида "параметр=значение"?
Смотря какие. Чекбокс не попадет.
проверка на установленность параметра в посте не обязательна, в гете - обязательна
 

iden

Новичок
Автор оригинала: *****
Смотря какие. Чекбокс не попадет.
проверка на установленность параметра в посте не обязательна, в гете - обязательна
В данном примере рассматриваю только отправку текстового поля гетом.
Если текст. поля в любом случае попадают в строку запроса, тогда использовать isset в этом случае смысла нет, ибо будет всегда возвращать true. Я так понимаю. С толку сбивают примеры из книжки по php, где проверка всегда производится isset'ом, что и вызвало кучу вопросов.
 

Фанат

oncle terrible
Команда форума
С толку сбивают тебя примеры потому, что ты так ничего и не понял - что в каком случае применяется.
Примеры не обязаны охватывать все случаи, которые тебе встретятся в работе.
 

iden

Новичок
Возможно. Для меня все более менее прояснится, если получу ответ на вопрос "текст. поля в любом случае попадают в строку запроса?". Дабы не флудить лишними вопросами, если не затруднит, дайте пожалуйста ответ только на этот. Да или нет.
 

Фанат

oncle terrible
Команда форума
Если на веб-сервере есть урл, то ты не можешь гарантировать, что к нему не обратятся совсем без параметров. Ты не можешь запретить браузеру сделать это.
А, значит, проверка существования ожидаемой переменной желательна.

-~{}~ 13.10.08 11:30:

Я думаю, тебе надо еще очень много пофлудить "лишними" вопросами, пока до тебя, наконец, дойдет, как задавать их правильно
 

iden

Новичок
Автор оригинала: *****
Если на веб-сервере есть урл, то ты не можешь гарантировать, что к нему не обратятся совсем без параметров. Ты не можешь запретить браузеру сделать это.
А, значит, проверка существования ожидаемой переменной желательна.
Это понятно. Здесь вопросов нет, если дело касается проверки - делать или нет. Но вопрос не в этом. Просто нужен ответ - да или нет на выше приведенный вопрос и все.



Я думаю, тебе надо еще очень много пофлудить "лишними" вопросами, пока до тебя, наконец, дойдет, как задавать их правильно
Прошу прощения конечно, если нарушил какие-нибудь правила, но я задаю вопросы так как они возникают. Буду признателен, если объясните конкретнее по этому поводу. Спасибо.
 

Активист

Активист
Команда форума
>С толку сбивают примеры из книжки по php, где проверка всегда
>производится isset'ом, что и вызвало кучу вопросов.

Куча таких дебильных книжек появилось. В них же ссылки оставляют на PHP клаб (и пишут - доброе сообщество поможет начинающим девелоперам).

Совет тебе один - сменить книжку, взять что-нибудь поновее.

ЗЫ: жаль, что в таких книжках не учат пользоваться мануалами.
 

Фанат

oncle terrible
Команда форума
А давай ты сам объяснишь? Ведь форум - это место для общения. А не для вопросов в форме ультиматума.
Объясни, чем вызван твой вопрос, расскажи, что делает скрипт, в котором эта проверка, по-твоему, не нужна.

-~{}~ 13.10.08 11:44:

Активист
чем тебе не понравилась книжка, в которой рекомендуют использовать isset? И что не так с рекомендацией обращаться на пхпклуб?
 

iden

Новичок
Никому ультиматум не хочу ставить, прошу прощения конечно, это непреднамеренно. Просто хочу получить ответ на вопрос - да или нет, чтобы лишне не флудить и не занимать ваше время. Вот и все о чем я прошу и напоминаю на протяжении нескольких топиков.

По поводу скрипта: начал экспериментировать, в результате - тупик. Для надежности тупо скопировал аналогичный(разница только в названиях) пример из книжки - тоже не работает как должен был бы, в том числе и по книжке. Я - еще чайник, автор - профи. В ком у меня могут возникнуть сомнения? Конечно в себе. Отсюд и вопросы. И я не прошу выкладывать всю теорию, просто хочу получить ответ на приведенный мной вопрос и все. Спасибо.
 

Фанат

oncle terrible
Команда форума
Сомнения у тебя возникают в квалификации собеседников на форуме. В твоем вопросе нет логики: ты сам пишешь, что "Здесь вопросов нет, если дело касается проверки - делать или нет.". Делать. Если делать - значит вопрос, отправляет форма, или не отправляет, просто не имеет смысла.
Но ты упорно повторяешь его не объясняя, чем он вызван.
начал экспериментировать, в результате - тупик.
почему бы не задать вопрос про этот тупик здесь?
упо скопировал аналогичный(разница только в названиях) пример из книжки - тоже не работает как должен был бы,
почему не привести здесь этот код и не спросить, почему он не работает?
 

iden

Новичок
Честно говоря, даже не знаю как бы еще описать, просто придется первые посты повторить. Код скрипта не меняется, могу только добавить код самой формы:

<form action="t2.php" method="get">
<input type="text" name="name"><br>
<input type="submit" value="Send">
</form>
В первом посте код t2.php.

Попробую задать тот же вопрос с другой стороны. Ответ для себя увидел в посте triumvirat. В своем втором посте, я хотел подтвердить, правильно ли я понял его ответ. Вывод, который я сделал из этого ответа: даже если текстовое поле name не заполнено, переменная все равно передается на сервер в массиве $_GET. Следовательно строка запроса примет вид name=. Далее следует, что isset всегда в этом случае будет ворачивать true, т.к. переменная будет существовать пока существует поле в форме. Это правильный вывод?

Вопрос на самом то деле мелкий. Уже в целую конференцию перерос.
 

iden

Новичок
Вопрос в большей степени не к isset и т.п., а к формированию header при методе get

-~{}~ 13.10.08 14:11:

Спасибо всем за помощь. Отдельно - triumvirat. Ответ получен. Тогда получается, что книжка моя неправильная.
Может посоветуете заодно стоящую литературу(помимо мануала)? Недавно взялся за "php5 в подлиннике" от Котерова и Костарева - стоящий труд или нет?
 

iden

Новичок
Дословный код из книги(я добавил только echo $_POST['name']; в handler.php):

index.php
PHP:
<form action=handler.php method=post>
Имя : <input type=text name=name><br>
e-mail : <input type=text name=emai><br>
<input type=submit value=send>
</form>
handler.php
<?php
PHP:
// Проверяем, передано ли значение полю name
if (!isset($_POST['name']))
{
	// если переменная $name не установлена, просим повторить ввод имени
	echo "He введено значение в обязательное к заполнению поле name<br>";
	echo "<a href=# onClick='history.back()'>Вернуться к правке</а>";
	exit() ;
}
	else
{
	echo $_POST['name'];
}
?>
 
Сверху