php逻辑';和';不符合逻辑.(我在这里错过了什么)


php logical 'and' not logical. (what am I missing here)

给定以下

expire date-> 2014-10-14 notify date-> 2014-10-06 current date-> 2014-10-08 Fine 
expire date-> 2014-10-07 notify date-> 2014-10-06 current date-> 2014-10-08 Expired 
expire date-> 2014-10-11 notify date-> 2014-10-06 current date-> 2014-10-08 Fine 
expire date-> 2014-10-05 notify date-> 2014-10-06 current date-> 2014-10-08 Expired 

和代码

FOR loop (each row)
    if ($expire date < $current_date) {
        echo "Expired <BR/>";
    } elseif (($expire date >= $notify_date) && ($expire date <= $current_date)) {
        echo "Warning <BR/>";
    } elseif ($expire date > $notify_date) {
        echo "Fine <BR/>";
    }
END FOR

结果为何
很好
已过期
很好
过期

为什么expire date -> 2014-10-07不打印Warning

这是因为$vid_date小于$current_date。它满足了你的第一个条件,永远不会达到第二个。您通常需要将这样的链式条件从最具体的到最一般的进行排列。

我认为问题出在您的第一个逻辑上

 if (vid date < $current_date) {
        echo "Expired <BR/>";

尝试将其移动到最后一个

尝试将您的支票从最具体的重新排序到最少的:

FOR loop (each row)
    if ((expire date >= $notify_date) && (expire date <= $current_date)) {
        echo "Warning <BR/>";
    } elseif (expire date < $current_date) {
        echo "Expired <BR/>";
    } elseif (expire date > $notify_date) {
        echo "Fine <BR/>";
    }
END FOR

你需要安排你的条件词。把你的第一个条件放在最后解决问题。