Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > $_POST==true когда его и небыло! Почему так?


Автор: Kotakota 23.12.2010, 13:12
Привет.
Простейший скрипт:
Код

<?php
if(isset($_POST)) echo "Done";
?>


Ввожу в браузере: http://localhost/index.php
и получаю текст: Done

Как это может быть, когда я ничего не пересылал методом POST?

А еще делаю так:
Код

<?php
if(isset($_POST)) {
foreach($_POST as $key) echo $key;
}
?>


Ничего не выводит.
Есть еще похожая проблема здесь http://forum.vingrad.ru/forum/topic-115207/view-all.html
но нет решения.

Автор: patap 23.12.2010, 13:52
потому что он(массив $_POST) всегда есть. Если ничего не передавалось - будет просто пустой массив - что всегда будет тру
Код

var_dump($_POST);

Автор: MoLeX 23.12.2010, 13:55
Код

var_dump($_POST);


имеем
Цитата

array
  empty


Чтобы такого не было, надо делать так
Код

if(isset($_POST['my_var']) ) echo "Done";


или так
Код

if(isset($_POST) AND !empty($_POST) ) echo "Done";
 

Автор: Kotakota 24.12.2010, 08:03
Спасибо всем!
Просто в PHP 4, делал простую проверку:
Код

if(!isset($_POST)) {
}


Там такое работало...

Автор: ksnk 24.12.2010, 09:57
Kotakota, Все значительно страньше  smile 

в php4 такой код работать не мог. Мог работать вот такой
Код

if(!empty($_POST)) {
...
}

а вообще-то нужно бы проверить каким образом до нас добирается клиент. Это записано в переменной $_SERVER["REQUEST_METHOD"]. Тонкость в том, что потенциально можно сделать POST запрос и ничего не передавать в массиве POST. Метод (пустой пост) , кстати, довольно удобно применять для того, чтобы избегать ненужного кеширования на стороне клиента, при использовании ajax 

Автор: BuShaRt 24.12.2010, 14:37
Isset проверят существования переменной. Пустая переменная считается существующей.
Поэтому для проверки наличия данных в переменной используется функция empty (зачастую в связке с реверсом "!")

По сути, то что вы хотели получить от isset, вы получите от !empty

Код

if (!empty($_POST['action'])) {

}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)