Проблем при проверката на true and false

novakabg

Registered
Здравейте, приятели.

Имам едно кодче което ме мъчи доста и не съм мн спец по PHP, и се чудя дали греша някъде!


Код:
//Имам изикване на data

$this->request->post['pizza_check'] // Винаги връща true или false

И искам да стартирам друг код ако примерно pizza_check е true

И ето и моята глупава проверка и всякакви други начини за проверка  :D 


if ($this->request->post['pizza_check'] === true)
if ($this->request->post['pizza_check'] == "true")

Ето крайната проверка: 

if ($this->request->post['pizza_check'] === true) {

 echo "Pizza Check";


} elseif($this->request->post['pizza_check'] === false ) {
  echo "No Pizza Check";

} else {
   echo "da ili ne ";
}

Искам да кажа че винаги ми казва че е false, чудя се защо не се получава.

Винаги изкарва отговор да или не дори да има и false или true :)
 
ако правилно съм разбрал искаш да правиш проверка на поле което е true или false в база данни ако е true да показва da ако е false да показва ne, това според мен ще стане или поне при мен работи и извежда резултат.

PHP:
if($row['tbl_name']=='true'){
echo '<tr><td><span style="color:#FF0000">da<td><br>';
}
if($row['tbl_name']=='false'){
echo '<tr><td><span style="color:#E0E0E0">ne<td><br>';
}
 
Първо се убеди, че променливата наистина не е false във всички случаи, защото при това положение кодът ти ще е съвсем валиден:
PHP:
var_dump($this->request->post['pizza_check'])
 
Много зависи как сетваш променливата. Ако я сетваш така:
PHP:
$this->request->post['pizza_check'] = "true";
то true ти е стринг защото е в кавички. Принтирай с var_dump променливата за да видиш какво съдържа като информация в себе си. Отделно просто можеш да направиш и така:

PHP:
//Без isset
if ($this->request->post['pizza_check']) { print 'True';}
//С isset
if (isset($this->request->post['pizza_check'])) { print 'True';}
 
Само дето не разбрахме какво реално ти връща pizza_check. А, ако трябва да съм и полезен с нещо, да държиш true/false в базата данни е грешно. Когато нещо е true/false в базата се записва в TINYINT поле 1 или 0.

Защо? Ами проблема ти си го дал ясно в темата си.


П.П. Дака, ако получиш празен string на isset ще ти върне true, което би било грешно.
И все пак, проблема трябва да се реши на друго място първо, именно за да се избегнат такива гимнастики, които се опитвате да му предложите.
 
Първо полето е празно, правя проверка през file_get_contents, и стандартно ми е true явно, идеята ми тук е че после правя ajax проверка за инфо и ми изкарва валидация, която е true или false.

И при True стартира друг скрипт който не прави други неща.
 
novakabg каза:
Първо полето е празно, правя проверка през file_get_contents, и стандартно ми е true явно, идеята ми тук е че после правя ajax проверка за инфо и ми изкарва валидация, която е true или false.

И при True стартира друг скрипт който не прави други неща.

Както казаха колегите, най-вероятно проблема идва от там, че променливата ти е string, а не boolean.. Т.е. и за "true" и за "false" стринг ще връща винаги True ако проверяваш със ==, защото подаваш стойността като стринг. Когато стринг-а не е null, той е true.

Когато проверяваш с === освен стойността на променливата, то проверя и тип на променливата. Т.е. ти сравняваш string с boolean и затова 'true' не е равно на true.
 
Не знам какво правиш, но цялата ти картинка изглежда ужасно грешна.
Увери се какъв ти е типа щом не си дигурен и тогава прави проверки.

И е време да се научите да използвате дебъгери.
 

Горе