PHP if / elseif逻辑与&&和||

时间:2013-01-05 20:34:37

标签: php if-statement

我有一些PHP代码,用于根据某些HTML发送的值运行不同的mySQL查询。从HTML发送的值是我使用的当天:

<?php $day = date("w"); ?>

当我使用时:

<?php echo $day; ?>

它返回6,这是应该做的(因为它是星期六),所以我可以确认我的HTML / php正在向我的脚本发送正确的信息。

现在在我的脚本中,我在if / elseif语句中有一个很大的mySQL查询列表,其中包含&amp;&amp;和||条件。

以下是前两个示例:

if(($noshow == 1) && ($day != 5 || $day != 6 || $day != 0)){
$run = mysql_query("UPDATE employee_data SET points=points+5 WHERE ID=" . $id) or die(mysql_error());
}
elseif(($noshow == 1) && ($day == 5 || $day == 6 || $day == 0)){
$run = mysql_query("UPDATE employee_data SET points=points+7 WHERE ID=" . $id) or die(mysql_error());
}

变量$ noshow也是从我的html文件中发送的,它是一个值为1的复选框(如果选中)。所以我需要它做的是根据它的日期运行一个查询。在第一个语句中,我希望它更新点等于当前点加5,如果检查html中的框,如果它不是星期五,星期六或星期日(5,6,0)。

下一个声明应该与第一个声明做同样的事情,但仅限于星期五,星期六或星期日。对于我所做的各种复选框/选项,该脚本还有大约10个其他语句。

所以我遇到的问题是它只运行第一个语句,即使当天为6(我在上面解释过)

我遇到了这个问题大约两个小时,这让我发疯了。我目前的想法是我的if语句的语法不正确。

2 个答案:

答案 0 :(得分:4)

非常简单。因为你说

,你的第一个陈述将在day = 6时起作用
IF DAY IS NOT EQUAL TO 5
OR
DAY IS NOT EQUAL TO 6

所以当天不等于5时,它会起作用!而你的第二个陈述有 elseif ,所以它在第一次做的时候不起作用。如果你希望你的第一个声明在白天= 6时不起作用,那么你必须告诉它

IF DAY IS NOT EQUAL TO 5
AND
DAY IS NOT EQUAL TO 6

因此,简单的更新

if(($noshow == 1) && ($day != 5 && $day != 6 && $day != 0)){
$run = mysql_query("UPDATE employee_data SET points=points+5 WHERE ID=" . $id) or die(mysql_error());
}
elseif(($noshow == 1) && ($day == 5 || $day == 6 || $day == 0)){
$run = mysql_query("UPDATE employee_data SET points=points+7 WHERE ID=" . $id) or die(mysql_error());
}

提示

如果您对IF条件的工作方式感到困惑,请翻译&amp;&amp;和||英语和阅读。例如,您的第一个语句将被视为

IF NO SHOW IS 1 AND (DAY IS NOT EQUAL TO 5 OR DAY IS NOT EQUAL TO 6 OR DAY IS NOT EQUAL TO 0)

以这种方式阅读将使这一陈述更加明显,即使在第6天也是如此

答案 1 :(得分:0)

如果$ day!= 5,它将返回true,因为您正在使用||,请尝试使用&amp;&amp;确保所有测试都是必需的。