【问题标题】:I want to mark attendance of a student once per day in my database我想在我的数据库中每天标记一次学生的出勤情况
【发布时间】:2018-04-21 06:41:54
【问题描述】:

我想从 Arduino 扫描 RFID 卡,它应该每天标记一次出勤,而不是每次扫描卡时。​​p>

这是标记考勤的PHP代码:

public function getRFIDAttendanceApi(){
    $rfid_uid = trim($_REQUEST['uid']);
    $sql = "select count(*)as tot from tbl_users where rfid_uid='$rfid_uid'";

    $data = $this->getData($sql);
    if(count($data)>0 && $data[0]['tot']>0){
        $sql = "insert into tbl_attendance set rfid_uid='$rfid_uid'";
        $flag = $this->conn->query($sql);
        if($flag){
            echo "Attendance marked successfully!";
            die;
        } else {
            echo "Sorry! Something unexpected happened!";
            die;    
        }
    } else {
        echo "invalid access";die;
    }

这是mysql中重复标记的考勤表

| att_id | rfid_uid | punch_timestamp     | date       | time     |
+--------+----------+---------------------+------------+----------+
|      1 | 85988145 | 2018-04-21 10:48:51 | 2018-04-21 | 10:48:51 |
|      2 | 85988145 | 2018-04-21 10:48:52 | 2018-04-21 | 10:48:52 |

如何做到一天一次?谢谢。

【问题讨论】:

    标签: php mysql arduino rfid


    【解决方案1】:

    只需在 rfid_uid 和日期上为考勤表添加一个唯一的约束。

    ALTER TABLE tbl_attendance ADD CONSTRAINT UK_ATTENTANCE UNIQUE(rfid_uid, `date`);
    

    这样,一天内第一次成功打卡的卡就会被插入到数据库中。

    【讨论】:

      【解决方案2】:

      如果您的主键 (att_id, date) 则您不能多次插入具有给定日期的给定用户。然后,您的应用程序代码将处理用户尝试每天多次注册并显示错误消息的情况

      【讨论】:

      • 你不能用 att_id 来做,因为每次它都会增加,它不会做预期的工作
      • 我认为 att_id 代表attendant_id 而不是attends_id。无论如何,公认的解决方案使用相同的想法,为每个用户设置一个唯一的日期。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2021-05-09
      • 1970-01-01
      • 2021-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多