我正在制作一个简单的时钟系统,允许员工记录他们的工作时间。
我有一个表,用于存储时间戳和天气,这是一个打卡或打卡的 Action 。根据给定用户的最后操作,会显示相反的选项。例如,如果最后一个 Action 是下类,那么呈现的 Action 应该是下类。
在用户没有使用系统的情况下,应该向他们提供签到选项。
$sql_status = "SELECT * FROM timeclock WHERE employeeid = $employee_number ORDER BY id DESC LIMIT 1";
if ($result=$mysqli->query($sql_status)) {
while ($row = $result->fetch_row()){
$timeclock_action = $row[2];
$timeclock_timestamp = $row[3];
if($timeclock_action=="out") {
$forward_action = "clockin";
$forward_action_label = "Clock in";
$timeclock_status_label = "Last clock out: ";
} elseif($timeclock_action=="in") {
$forward_action = "clockout";
$forward_action_label = "Clock out";
$timeclock_status_label = "Clocked in: ";
}
}
} elseif(mysql_num_rows($result)==0) {
$forward_action = "clockin";
$forward_action_label = "Clock in";
$timeclock_status_label = "You've never clocked in before";
} else {
echo "Error: " . $sql . "<br>" . $mysqli->error;
}
我的想法是 elseif mysql 查询返回 0 行,变量将被相应地设置,但它们根本没有被设置。 我的想法哪里错了?谢谢!
最佳答案
您当前的逻辑是,如果查询失败 - 即查询返回false(不是它没有返回任何结果,而是执行完全失败),您检查返回的行数是否为零。
相反,您应该先执行查询,然后检查是否返回了任何行。您也不需要为多行循环,因为您只希望在查询中有一行包含 LIMIT 1
。
您还应该考虑使用准备好的语句而不是直接在查询中注入(inject)变量,并进行一些其他错误处理;因为错误不应该直接显示给用户(记录错误,并显示通用的“出错了”消息)。
// The query to be executed
$sql_status = "SELECT * FROM timeclock WHERE employeeid = $employee_number ORDER BY id DESC LIMIT 1";
// See if the query was successful or not
if ($result = $mysqli->query($sql_status)) {
// If there are any rows returned
if ($result->num_rows) {
// Fetch rows - no need for a loop since you only expect one record (LIMIT 1 in the query)
$row = $result->fetch_row();
$timeclock_action = $row[2];
$timeclock_timestamp = $row[3];
if ($timeclock_action=="out") {
$forward_action = "clockin";
$forward_action_label = "Clock in";
$timeclock_status_label = "Last clock out: ";
} elseif ($timeclock_action=="in") {
$forward_action = "clockout";
$forward_action_label = "Clock out";
$timeclock_status_label = "Clocked in: ";
}
} else {
$forward_action = "clockin";
$forward_action_label = "Clock in";
$timeclock_status_label = "You've never clocked in before";
}
} else {
// The query failed
echo "Error: " . $sql . "<br>" . $mysqli->error;
}
关于php - elseif 当 mysql 查询没有返回任何行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54352066/