PHP中的if/elseif逻辑运算符&&和||

3

我有一些PHP代码,用于根据从HTML中发送的值运行不同的mySQL查询。从HTML发送的值是当前日期,我使用以下代码获取:

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

当我使用:
<?php echo $day; ?>

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

现在,在我的脚本中,我有一个大列表,其中包含if/elseif语句中的许多MySQL查询,这些查询具有&&和||条件。

以下是前两个示例:

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(如果选中)。因此,我需要根据今天是星期几来运行查询。在第一个语句中,如果HTML中的框被选中,并且不是星期五、六或日(5、6、0),我希望它将点数更新为当前点数加5。
下一个语句也应该与第一个相同,但仅在星期五、六或日时才执行相同的操作。脚本继续使用大约10个其他语句来处理我制作的各种复选框/选项。
所以我遇到的问题是,即使今天是6(如上所述),它也只运行第一个语句。我已经为这个问题转了两个小时的圈子了,让我发疯。我目前的想法是我的if语句的语法不正确。
2个回答

5
非常简单。如果day = 6,您的第一个语句将起作用,因为您说了
IF DAY IS NOT EQUAL TO 5
OR
DAY IS NOT EQUAL TO 6

因此,当day不等于5时,它将起作用!您的第二个语句有elseif,因此当第一个语句起作用时,它将不起作用。如果您希望在day = 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条件的工作原理感到困惑时,请将 && 和 || 翻译成英语并阅读。例如,您的第一条语句应该这样读:

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天,这个声明也将是真实的。

0
如果$day!= 5,则会返回true,因为您正在使用||,请尝试使用&&以确保需要所有测试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接