[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: isset вопрос
Сириус
Здравствуйте, заметил что isset дает всегда true

if (isset($_POST['clanInfo'])) {


Независимо, есть ли что в форме, ветку проходит с true :blink:

Можете подсказать, что не так?



Спустя 3 минуты (6.12.2011 - 23:47) inpost написал(а):
Да всё так. isset - проверка на существование. Отправка формы - отправляет данные. Если ты в форме ввёл "ничего", то и приходит пустая переменная.
Возможно тебе надо использовать связку: trim + !empty

Спустя 23 секунды (6.12.2011 - 23:48) cyberside написал(а):
Используй
if (isset($_POST['clanInfo']) and !empty($_POST['clanInfo'])) {

Точно сказать не могу, т.к по такому куску кода ничего не понятно, какая поступает информация и с чем...

Спустя 1 минута, 10 секунд (6.12.2011 - 23:49) Сириус написал(а):
На сколько я знаю, трим убивает пробелы, а у меня текст информации пользователь передавать должен.

<textarea id="clanInfo" name="clanInfo" rows="15" cols="95" style="width: 80%" ></textarea>

Спустя 2 минуты (6.12.2011 - 23:51) inpost написал(а):
Сириус
Почитай внимательнее про trim, и где именно удаляет он пробелы! smile.gif Не зря же я советую.

cyberside
Товтология: если твой ник начинается на c, и твой ник не пустой, и твой ник начинается на cyb. smile.gif Достаточно !empty, ошибки не будет.

Спустя 45 секунд (6.12.2011 - 23:51) cyberside написал(а):
Мой тебе поможет, а вообще рекомендую на проверку использовать такую вот штучку:
<textarea required></textarea>

Не позволяет отправить пустое сообщение, тоесть делает его обязатеьным - htmlbook.ru/html/textarea

Спустя 41 секунда (6.12.2011 - 23:52) cyberside написал(а):
inpost, не подумал)

Спустя 1 минута, 35 секунд (6.12.2011 - 23:54) inpost написал(а):
cyberside
HTML5, не везде работать будет, а значит не кроссбраузное решение. Твой пример подойдет лет через 5, когда люди все перейдут на новые версии браузеров.

Спустя 4 минуты, 17 секунд (6.12.2011 - 23:58) cyberside написал(а):
Согласен, но если совместить можно немного себе помоч...

P.S: Думаю лет через 5 уже додумаются выдать пользователям всех ОС, один эдинственный браузер что бы было всем счастье и забыть про КБ))

Хотя гонка не так как за щастьем пользователей как за наживой от рекламы)

Спустя 1 минута, 11 секунд (6.12.2011 - 23:59) inpost написал(а):
cyberside
Антимонопольный комитет оштрафует тебя на пару миллионов за такое дело! smile.gif

Спустя 6 минут, 24 секунды (7.12.2011 - 00:06) Сириус написал(а):
Спасибо, trim + !empty помогли

Спустя 7 минут, 41 секунда (7.12.2011 - 00:13) inpost написал(а):
Сириус
Интересно, в чём? Трим убрал лишь пробелы. Покажи код.

Спустя 7 часов, 52 минуты, 46 секунд (7.12.2011 - 08:06) linker написал(а):
Логически empty() тут не подходит, ибо она проверяет на пустоту существующую переменную, элемент массива. Cамая логически правильная конструкция будет сочетание
if (isset() && !empty())
{
}
С другой стороны, сабмит формы всегда отправляет в запрос всякие input, textarea, поэтому как бы isset() и не совсем нужен. Но кто сказал, что нельзя использовать curl для отпавки запросов, где можно опускать параметры.

Спустя 6 часов, 56 минут, 2 секунды (7.12.2011 - 15:02) inpost написал(а):
А чем же тебе просто !empty не подошел? smile.gif

Спустя 17 часов, 16 минут, 8 секунд (8.12.2011 - 08:18) linker написал(а):
Логика, Inpost, логика. Существование и пустота - это разные логические понятия. Вот что тебе скажет строка
if (!empty($a)) { echo $a; }
только то, что идёт проверка на пустоту, а вот чёрт его знает существует ли эта переменная, может автор строки думал про условие "если $a не определена"? Поэтому сочетание isset() и !empty(). По нему ты точно определишь что имелось ввиду. К тому же не факт, что в следующих версиях PHP опять не начнёт кидать ошибки empty() при проверке неопределённых сущностей.

Спустя 4 часа, 59 минут, 47 секунд (8.12.2011 - 13:18) inpost написал(а):
linker
Пока тишина и не предвещает беды, зачем мечтать о чём-то "а вдруг". Можно проще, так и делаем проще.

Спустя 23 минуты, 37 секунд (8.12.2011 - 13:42) Nikitian написал(а):
Сравнивать надо с пустой строкой, а то empty() от '0' вернёт true. А кто сказал, что пользователю нельзя ввести ноль?
Ну и для проверки наличия элемента массива всё же лучше использовать array_key_exists(). Почему-то мне для этого isset() не нравится %)

Спустя 13 минут, 58 секунд (8.12.2011 - 13:56) Winston написал(а):
Nikitian
А если элемент есть в массиве, но пустой? array_key_exists его пропусти... Или нет ?

Спустя 4 минуты, 32 секунды (8.12.2011 - 14:00) Nikitian написал(а):
Цитата (Winston @ 8.12.2011 - 13:56)
Nikitian
А если элемент есть в массиве, но пустой? array_key_exists его пропусти... Или нет ?

array_key_exists() проверяет лишь наличие элемента, а его содержимое проверяйте сравнением со строкой, ну или оттримив сравнивайте. Просто трим на несуществующем элементе кинет варнинг, так что в любом случае надо 2 последовательные проверки: на существование и на правильную запоненность. Ну если ноль является невалидным значением, то можно и сократить до empty()? но это нерасширяемо.

Небольшой скриптик с основными различиями


<?php
$t=array(0=>null);
echo'<pre>'.var_export($t).'</pre><br />';
echo isset($t[0])?'isset':'not isset';
echo'<br />';
echo empty($t[0])?'empty':'not empty';
echo'<br />';
echo array_key_exists(0,$t)?'key exists':'key not exists';
echo'<br />';
$t=array(0=>0);
echo'<pre>'.var_export($t).'</pre><br />';
echo isset($t[0])?'isset':'not isset';
echo'<br />';
echo empty($t[0])?'empty':'not empty';
echo'<br />';
echo array_key_exists(0,$t)?'key exists':'key not exists';

Вывод:

array ( 0 => NULL, )


not isset
empty
key exists
array ( 0 => 0, )


isset
empty
key exists


Спустя 17 часов, 44 минуты, 49 секунд (9.12.2011 - 07:45) linker написал(а):
Наличие ключа проверяет и isset() другое дело, что isset(NULL) вернёт FALSE. Но в $_POST никогда не будет NULL. Для других массивов, я конечно же тоже предпочитаю array_key_exists().
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.