2010-02-05 3 views
1

, следующий оператор возвращает «do actions! What2» при запуске. Что тут происходит? кажется, что верны и ложные возвращаются!Если оператор, возвращающий оба значения true и false в PHP

if (md5($email) == $emailHash) { 
    echo "do actions!"; 
} else { 
    echo "what2"; 
} 
+7

отправить больше кода, звучит как его выполнение более одного раза –

+0

да что-то определенно не так, что-то не может быть как «истинным», так и «ложным», что-то еще происходит, что не показано –

+4

Возможно, настало время, Вселенная рушится! –

ответ

2

нет шансов - вы вызываете код дважды!

1

Действительно ли это тот код, в котором эта проблема возникает? Потому что, как это происходит сейчас, не может быть такого. Если это не ваш фактический код, проверьте, есть ли точка с запятой после вашего условного, но до первого блока.

4

Двойной вызов функции, в котором отображаются как истинное условие, так и ложное состояние? Вы можете создать stacktrace, используя функцию debug_print_backtrace, и посмотреть, вызвана ли она более одного раза.

1

Если код находится в for или while петлях (или иным образом вызывается дважды, например, в функции), то это может быть, что if оценивает верно в первый раз и ложный во второй раз. В противном случае я не вижу причин, почему это произойдет.

1

Я думаю, что окружающий код делает неправильно. Ничего плохого в этом. Также попробуйте ввести три равных знака === в ваших условиях if, а не в два.

0

Думаю, нам нужно больше кода, чем только ваше условие if. На моей коробке я получил «what2», который является правильным.

if (md5($email) === $emailHash) 
{ 
    echo "do actions!"; 
} 
else 
{ 
    echo "what2"; 
} 
0

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

1

Я не знаю, что именно там происходит, но я привык к делать что-то подобное для одной и той же проблемой:

$userHash = md5($email); 
if ($userHash == $emailHash) { 
    // etc... 
} 

Поэтому делает одну вещь за заявление в то время, что делает отладку Полегче.

Смежные вопросы