Обычный, простенький код, но переменная не принимает значение POST...
Если я вместо $task буду прописывать $_POST['task'] - всё будет работает
echo также, с $task не выводит ничего, а с $_POST['task'] выводит....
require_once('bd.php');
$task = $_POST['task'];
if($task = '') {
echo 'Вы ничего не ввели';
exit();
}
$sql = 'INSERT INTO task(task) VALUES(:task)';
$query = $pdo->prepare($sql);
$query->execute(['task' => $task]);
echo $task;
и на пустоту проверяется не '' === $var, а, например empty($var) Иначе, волшебным образом там может оказаться например null. Или булево значение. И это значение благополучно пройдет эту проверку
Антон, == это чтобы не сломать гавно код от старых версий php.
== не рекомендуется использовать в новом коде, если не хотите не предсказуемого поведения.
tukreb, Dark_Dante, вы договоритесь между собой. Всё таки === или == (он же empty), в новом коде, который автор пишет прямо сейчас. Что все таки выбрать?
Vitsliputsli, если придираться, то непонятно зачем вообще берётся переменная $task? Над ней не производятся действия. Просто переменная проверяется на пустоту и уходит в работу.
Как бы,
require_once('bd.php');
if(empty($_POST['task'])) exit('Вы ничего не ввели');
$sql = 'INSERT INTO task(task) VALUES(:task)';
$query = $pdo->prepare($sql);
$query->execute(['task' => $_POST['task']]);
echo $_POST['task'];
Игорь, ага, придраться всегда можно. Но, я не про придирки, а про принципиальный момент. Один утверждает, что только сравнения с учетом типов, другой - берите без учета типов. Хотел услышать аргументы в пользу каждого решения, но тишина. На мой взгляд, безусловно нужно использовать операторы с учетом типов, когда мы знаем точно передаваемые типы, а мы их всегда знаем, когда этим управляем. Но, бывают ситуации, когда данные приходят извне, и в этом случае, либо заморачиваться с проверками и ручным преобразованием, и тогда все операции будут с учетом типов, либо воспользоваться неявными преобразованиями в языке и сократить кол-во кода, не вижу в этом ничего плохого.
Vitsliputsli, в данной задаче нет ни слова о типах, только о проверке на то, что переменная не пустая. Поэтому спор == или === совершенно беспочвенный. А чтобы однозначно избежать неопределённости и решить задачу проверки на то, что переменная не пустая, используем функцию empty().
"Бывают ситуации" это за пределами рассматриваемого условия.
в данной задаче нет ни слова о типах, только о проверке на то, что переменная не пустая. Поэтому спор == или === совершенно беспочвенный. А чтобы однозначно избежать неопределённости и решить задачу проверки на то, что переменная не пустая, используем функцию empty().
как спор может быть беспочвенным, если для решения задачи предложено 2 оператора, а они действуют по-разному? Фраза "переменная не пустая" очень условная, empty проверяет исходя из специфики языка, а раз автор путает операторы присвоения и сравнения, то это как раз и может создать неопределенность для него. И, очевидно, что оператор == дает больше вариативности, чем ===, а значит нужно хорошо представлять себе все эти варианты.
"Бывают ситуации" это за пределами рассматриваемого условия.
За какими пределами? Если я как раз говорил, про получение данных извне, т.е. прям как раз рассматриваемый случай.
Vitsliputsli, вы не автор вопроса. Вы вклинились в обсуждение, придумали какие-то свои дополнительные условия, которых не было в вопросе и теперь самоутверждаетесь в теме рассказывая, что ваше мнение самое правильное если рассматривать именно ваши уточнения, а не исходный вопрос.
Играйте в эти игры сами.
вы не автор вопроса. Вы вклинились в обсуждение, придумали какие-то свои дополнительные условия, которых не было в вопросе и теперь самоутверждаетесь в теме рассказывая, что ваше мнение самое правильное если рассматривать именно ваши уточнения, а не исходный вопрос.
Играйте в эти игры сами.
Второй раз, автору предложили 2 варианта, работающих по разному. Комментирующие разделились на 2 лагеря, что только 1 из вариантов верный. Так о каких дополнительных условиях вы пишите? Я не писал, что мое мнение самое верное, наоборот, хотел услышать аргументы других сторон. А вот вы заявили, что ваш вариант единственно верный, с аргументацией "я прав, а вы все не правы", а мою аргументацию по делу просто игнорируете.
Раз вклинились в обсуждение - давайте ваши аргументы. Если не понимаете, о чем я пишу, так прямо и спросите. Ваша "переменная не пустая" - это не абсолют в программировании, а просто специфика неявных преобразований в php. И, если автор (или тот, кто просто прочтет тему) проверяя через ==, незная, забыв или просто не учтя все вариации, наткнется, что 0 или false - это пустота, или в обратном случае, что число в строке - это не число, то ему не покажется, что я писал про что-то "лишнее".
А пока выглядит, что вы просто не понимаете, что разработка ведется не на языке, а с помощью языка. И если в доке написанно "проверяет, пуста ли переменная", то не нужно тупо копипастить, а надо разобраться, что имеется ввиду.