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 语句语法不正确。

4

2 回答 2

5

非常简单。如果 day = 6,您的第一个语句将起作用,因为您说过

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

所以当天不等于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 天,这个陈述也是正确的

于 2013-01-05T20:37:36.517 回答
0

If $day != 5 it will return true because you are using ||, try using && to make sure all tests are required.

于 2013-01-05T20:41:14.450 回答