在MySQL中构建RFID登录系统

时间:2020-02-27 11:57:48

标签: mysql

我正在尝试使用RFID构建自动出勤站点,目前MySQL已经记录了学生进入校园的时间和日期,但是我希望每个出勤时间都用该时间标记为“迟到”或“准时”他们进入了校园。

例如,学生A在7:11 AM在大门处轻按RFID,这将被标记为LATE,学生B在6:55 AM在大门处轻触其RFID,这将在MySQL的早期被标记。

我是JavaScript,MySQL和jQuery的初学者,所以我不知道使用哪个代码。我是自学成才的,所以我尝试在线搜索教程,但是对于这个教程,似乎找不到它的教程。

这是我的RFID标签代码。

<?php
require_once 'admin/connect.php';
$student = $_POST['student'];
$time = date("H:i", strtotime("+8 HOURS"));
$date = date("Y-m-d", strtotime("+8 HOURS"));
$q_student = $conn->query("SELECT * FROM `student` WHERE `student_no` = '$student'") or die(mysqli_error());
$f_student = $q_student->fetch_array();
$student_name = $f_student['firstname']." ".$f_student['lastname'];
$conn->query("INSERT INTO `time` VALUES('', '$student', '$student_name', '$time', '$date')") or die(mysqli_error());
echo "<h3 class = 'text-muted'>".$student_name." <label class = 'text-info'>at  ".date("h:i a", strtotime($time))."</label></h3>";

这是当学生点击他/她的ID时我的数据库当前的样子:

https://imgur.com/a/dgwMJ5i

嗨!我遇到了MYSQL错误,我不知道如何解决 。\ libraries \ classes \ Display \ Results.php#4196:PhpMyAdmin \ Display \ Results-> _ getSortedColumnMessage( , 字符串“ student_name”, ) 。\ libraries \ classes \ Sql.php#1666:PhpMyAdmin \ Display \ Results-> getTable( , 数组 数组 布尔值true, ) 。\ libraries \ classes \ Sql.php#1468:PhpMyAdmin \ Sql-> getHtmlForSqlQueryResultsTable( , 字符串'./themes/pmahomme/img/', 空值, 数组 布尔假, 整数0 整数0 布尔值true, , 数组 布尔值true, ) 。\ libraries \ classes \ Sql.php#2250:PhpMyAdmin \ Sql-> getQueryResponseForNoResultsReturned( 数组 字符串“ db_sars”, 字符串“时间”, 空值, 整数0 , 空值, 字符串'./themes/pmahomme/img/', 空值, , 字符串'SELECT date,student_no,student_name,time,当时间> \ '07:00 \'THEN \'LATE \'ELSE \'ON TIME \'END AS标签从{{1 }} time> = CURDATE()-在\ '05:00 \'和\ '09:00 \'之间按date,{{1 }}', 空值, ) 。\ import.php#758:PhpMyAdmin \ Sql-> executeQueryAndGetQueryResponse( 数组 布尔假, 字符串“ db_sars”, 字符串“时间”, 空值, 空值, 空值, 空值, 空值, 空值, 字符串'tbl_structure.php', 字符串'./themes/pmahomme/img/', 空值, 空值, 空值, 字符串'SELECT time,student_no,student_name,date,当时间> \ '07:00 \'THEN \'LATE \'ELSE \'ON TIME \'END AS标签从{{1 }} student_name> = CURDATE()-在\ '05:00 \'和\ '09:00 \'之间按date,{{1 }}', 空值, 空值, )

1 个答案:

答案 0 :(得分:0)

(请避免使用图片显示问题的关键部分)。

您的time表似乎包含以下列:

student
student_name
time
date

您似乎没有关于学生到达或离开的信息。这使您的逻辑有些棘手。假设time05:00之间的09:00表中的任何行都表示到达,并且07:00之后的任何到达都被认为是较晚的。您可以使用此查询获取上周的学生到达列表。必要时,它们将带有标签LATE,否则将带有标签ON TIME

  SELECT `date`, student, student_name, `time`,
         CASE WHEN time > '07:00' THEN 'LATE' ELSE 'ON TIME' END AS tag
    FROM `time`
   WHERE  `date` >= CURDATE() - INTERVAL 7 DAY
     AND `time` BETWEEN '05:00' AND '09:00'
    ORDER BY `date`, `student` 

我想这就是标记每个出席者的意思。

编辑:如果要在网站上显示这些标签LATE,则数据库中不需要多余的列。只需使用与我显示的查询类似的查询即可;查询本身包含定义延迟的规则并应用标签。然后显示查询的结果。通常,更改表以插入可从每行的现有内容派生的条件不是一个好主意。 (如果您有数亿行,并且必须denormalize表才能获得性能,那就不一样了。但是您离那一步还很遥远。)

专业提示:请勿在表或列的名称中使用诸如DATETIME之类的保留字。这样做会使查找错误变得更加困难。