>  기사  >  PHP 프레임워크  >  Thinkphp5.1은 학생들이 QR 코드를 스캔하여 좌석을 선택하는 재미있는 기능을 실현합니다.

Thinkphp5.1은 학생들이 QR 코드를 스캔하여 좌석을 선택하는 재미있는 기능을 실현합니다.

藏色散人
藏色散人앞으로
2021-09-24 15:46:532027검색

머리말

이 기능의 목적은 학생들이 코드를 스캔하여 좌석을 선택하는 기능을 교사가 볼 수 있는 별도의 기능으로 구현하는 것입니다. 학생은 로그인하지 않고 좌석을 선택했습니다. 이 경우 교사는 해당 코스에 로그인하여 학생이 이 코스에 로그인한 횟수를 계산할 수 있습니다. 교사는 번거로운 등록 및 로그인 없이 일부 기능을 구현할 수도 있습니다. 또한 이 제품을 사용하여 강좌를 생성하고 바인딩하여 학생 로그인 수를 계산할 수도 있습니다. 이는 이 제품에 대한 교사의 경험을 크게 증가시키고 총 사용자 수를 효과적으로 늘릴 것입니다.
이 문서에서는 학생 코드 스캔 기능 구현에 대해 구체적으로 설명하며 기타 세부 사항은 자세히 논의하지 않습니다.

준비

1. 먼저 각 교실의 각 섹션에 대해 classroom_time이라는 테이블을 만듭니다. 이 데이터는 하루에 11개의 섹션을 기준으로 교실 필드를 추가할 때 자동으로 생성됩니다. 그림에 표시된 것처럼 각 강의실은 11개의 강의실_시간 필드를 생성합니다. classroom_time,这些数据应该在增加教室字段时自动生成,以每天11个小节为例,每个教室生成11个classroom_time字段,如图。
Thinkphp5.1은 학생들이 QR 코드를 스캔하여 좌석을 선택하는 재미있는 기능을 실현합니다.

2.每个座位应该也要存入一个字段用于保存它的行列数,学生id和所对应的classroom_time_id用于保存它是哪个教室的哪个小节的座位。我们在这里称之为seattable,初始为0条数据。
Thinkphp5.1은 학생들이 QR 코드를 스캔하여 좌석을 선택하는 재미있는 기능을 실현합니다.

3.再建立一个网页用于显示一个classroom_time的座位表
Thinkphp5.1은 학생들이 QR 코드를 스캔하여 좌석을 선택하는 재미있는 기능을 실현합니다.

4.每个座位应该对应一个二维码,url传值这个教室id,行列数,同时查看座位表应该有一个单独的二维码,不用登录直接显示学生选座情况。
Thinkphp5.1은 학생들이 QR 코드를 스캔하여 좌석을 선택하는 재미있는 기능을 실현합니다.

我们学生扫码功能主要是对seattable表数据进行操作。

学生扫码功能实现

1.通过url获取这个座位的基本信息
通过扫码所传入的url,获取这个座位的行列号,classroom_id,也要通过静态方法获取student_id和第几小节数,小节数这里称为time。同时通过第几小节和教室id查询唯一一个classroom_time.

public function entercourse()
    {   
        $id = $this->request->param('id');
        
        $classroom_id = substr($id,0,4)*1;
        $row = substr($id,4,2)*1;
        $column = substr($id,6,2)*1;
        $time = Term::littleClass();
        if ($time11) {
            return $this->error('上课时间已结束', url('/index/student/page'));
        }
        $student_id = session('studentId');
        $classroom_time = Classroom_time::where('classroom_id',$classroom_id)->where('littleclass',$time)->find();
        $seattable = Seattable::where('student_id',$student_id)->where('classroom_time_id',$classroom_time->id)->find();
        return ;
    }
这里获取第几小节的同时判断一下,如果超出十一小节,说明上课时间已结束,返回到学生主页。

2.通过classroom_time的id和学生id在seattable表里找有没有这个字段,在这里定义为$seattable,我们要通过有无$seattableThinkphp5.1은 학생들이 QR 코드를 스캔하여 좌석을 선택하는 재미있는 기능을 실현합니다.

2. 각 좌석은 행과 열 번호를 저장하기 위해 필드에 저장되어야 하며, 학생 ID와 해당 강의실_시간_id는 어느 강의실에 속하는지 저장하는 데 사용됩니다. 여기서는 이를 Seattable이라고 부르는데, 처음에는 0개의 데이터입니다.

3. 교실_시간 좌석 배치도를 표시하는 다른 웹페이지를 생성하세요



4. 각 좌석은 QR 코드와 일치해야 합니다. URL은 강의실 ID와 행 및 행 수를 전달합니다. 동시에 좌석표를 볼 때 별도의 QR 코드가 있어야 합니다. . 로그인 없이 바로 학생들을 볼 수 있습니다. 좌석 선택.

우리 학생들 코드 스캔 기능은 주로 좌석 테이블 데이터를 조작하는 데 사용됩니다.

학생 코드 스캔 기능 구현Thinkphp5.1은 학생들이 QR 코드를 스캔하여 좌석을 선택하는 재미있는 기능을 실현합니다.
1. URL을 통해 이 좌석의 기본 정보를 얻습니다.
QR 코드를 스캔하여 전달된 URL을 통해 이 좌석의 행 번호와 강의실_ID를 획득하고, Student_id와 섹션 번호도 획득합니다. 정적 방법을 통해 측정 횟수를 여기서는 시간이라고 합니다. 동시에 섹션과 강의실 ID를 통해 유일한 강의실_시간을 쿼리합니다.Thinkphp5.1은 학생들이 QR 코드를 스캔하여 좌석을 선택하는 재미있는 기능을 실현합니다.

$seattable = Seattable::where('student_id',$student_id)->where('classroom_time_id',$classroom_time->id)->find();

        // 如果这个学生原来签过到
        if($seattable) {
        } else { // 如果这个学生原来没选过座位
        }
        return $this->success('选座成功', url('/index/student/page'));~~~~
여기서 섹션을 가져와 동시에 판단하면 11번째 섹션을 초과하면 수업 시간이 종료되어 다시 돌아옵니다. 학생 홈페이지.
2.classroom_time ID와 학생 ID를 사용하여 Seattable 테이블에 이 필드가 있는지 확인합니다. 여기에는 $seattable이 있는지 확인해야 합니다. 좌석 가능.

$primaryStudent = Seattable::where('row',$row)->where('column',$column)->where('classroom_time_id',$classroom_time->id)->find();

    // 如果这个座位原来有学生
    if ($primaryStudent) {
        // 如果这个学生是他自己
        if ($primaryStudent->student_id == $student_id) {
            return $this->error('您已成功扫码选择此座位,请不要重复扫码', url('/index/student/page'));    
        }

        // 通知他


        // 他行列信息清空
        $primaryStudent->row = 100;
        $primaryStudent->column = 100;
        if (!$primaryStudent->save()) {
            return $this->error('信息保存异常,请重新扫码', url('/index/student/page'));
        }
    }


    // 将新的行列数保存到学生那条数据里
    $seattable->row = $row;
    $seattable->column = $column;
    if (!$seattable->save()) {

        return $this->error('信息保存异常,请重新扫码', url('/index/student/page'));
    }
다음은 학생이 교실에 들어갈 때 데이터 조각이 있을 것입니다. 그가 자리를 선택할 때 다른 사람이 자리에 앉아 번호를 지우면 그는 행 수를 채울 것입니다. 행과 행의 경우 자리를 마련하지 않은 것과 동일하지만 교실에는 여전히 학생 ID 데이터가 존재하므로 교사가 강좌를 바인딩할 때 로그인 번호에 하나를 추가하는 데 도움이 됩니다. 🎜제가 원래 쓴 아이디어는 새로운 데이터를 생성하고 행과 열의 수를 설정하고 학생 ID를 지우는 것이었습니다. 이렇게 하면 다른 사람이 코드를 다시 스캔할 때 두 번째인지 판단할 수 없습니다. 스캔 또는 첫 번째 스캔으로 인해 총 학생 로그인 수를 정확하게 계산할 수 없습니다. 🎜student_id의 행과 열 값을 변경한다는 아이디어를 확립하는 것이 이 기능을 구현하는 열쇠입니다. 🎜🎜3. 학생이 로그인한 경우🎜 2번의 경우 이 자리가 비어있는 것으로 판명됩니다.🎜누군가가 있으면 먼저 그 사람이 본인인지 확인합니다. 자리에 있던 원래 학생의 데이터 중 누군가가 자리에 앉았음을 원래 사람에게 알리고 원래 사람의 행 데이터를 지우고 학생의 행 데이터를 채웁니다. 행 번호. 🎜 행과 열의 수를 직접 입력하는 사람은 없습니다. 🎜
// 如果这个学生原来没选过座位
            $primaryStudent = Seattable::where('row',$row)->where('column',$column)->where('classroom_time_id',$classroom_time->id)->find();
            // 如果这个座位原来有学生
            if ($primaryStudent) {
                // 通知他


                // 他行列信息清空
                $primaryStudent->row = 100;
                $primaryStudent->column = 100;
                if (!$primaryStudent->save()) {
                    return $this->error('信息保存异常,请重新扫码', url('/index/student/page'));
                }
            }
             
            // 创建一条新数据
            $seattable = new Seattable;
            
            $seattable->classroom_time_id = $classroom_time->id;
            $seattable->row = $row;
            $seattable->column = $column;
            $seattable->student_id = $student_id;
            $seattable->role = 0;
            if (!$seattable->save()) {
                return $this->error('信息保存异常,请重新扫码', url('/index/student/page'));
            } 
            
            // 如果这个classroom_time的状态为1,签到次数加一
            if ($classroom_time->status) {
                $score = Score::where('student_id',$student_id)->where('course_id',$classroom_time->courseinfo->course_id)->find();

                if ($score) {
                    // 如果本学生有本课程的一条数据,签到次数+1
                    $score->arrivals++;
                } else {
                    // 如果没有,新建之
                    $score = new Score;
                    $score->student_id = $student_id;
                    $score->course_id = $classroom_time->courseinfo->course_id;
                    $score->usual_score = 0;
                    $score->exam_score = 0;
                    $score->total_score = 0;
                    $score->arrivals = 0;
                    $score->respond = 0;
                    $score->arrivals++;
                }
                if (!$score->save()) {
                     return $this->error('信息保存异常,请重新扫码', url('/index/student/page'));
                }
            }
🎜예: 나(내 이름은 Zhang San)가 원래 코드를 스캔했는데 내가 코드를 스캔한 자리에 누군가가 있었습니다. 🎜QR코드 스캔 전🎜🎜🎜QR코드 스캔 후🎜🎜🎜🎜나중에 행과 행이 정렬되기 때문에 지워진 행과 행에 이름이 표시되는 것을 방지하기 위해 여기에서 행과 행을 100,100으로 재설정합니다. (행과 행의 최대값) 🎜🎜4. 학생이 로그인하지 않은 경우 좌석이 비어 있는지 먼저 확인합니다. 좌석에 사람이 있으면 먼저 알리고 행 번호를 지웁니다. Seattable에 로그인하지 않은 경우 해당 Student_id 및 Classroom_time_id 데이터가 없습니다. 이때 새로운 $seattable을 직접 생성하고 해당 Classroom->status인 경우 Student_id와 행 및 열 번호를 입력합니다. $seattable은 1입니다(상태 1은 강좌에 바인딩되었음을 의미하고 상태 0은 강좌에 바인딩되지 않음을 의미함). 그러면 총 로그인 횟수는 +1이 됩니다.🎜
// 如果这个学生原来没选过座位
            $primaryStudent = Seattable::where('row',$row)->where('column',$column)->where('classroom_time_id',$classroom_time->id)->find();
            // 如果这个座位原来有学生
            if ($primaryStudent) {
                // 通知他


                // 他行列信息清空
                $primaryStudent->row = 100;
                $primaryStudent->column = 100;
                if (!$primaryStudent->save()) {
                    return $this->error('信息保存异常,请重新扫码', url('/index/student/page'));
                }
            }
             
            // 创建一条新数据
            $seattable = new Seattable;
            
            $seattable->classroom_time_id = $classroom_time->id;
            $seattable->row = $row;
            $seattable->column = $column;
            $seattable->student_id = $student_id;
            $seattable->role = 0;
            if (!$seattable->save()) {
                return $this->error('信息保存异常,请重新扫码', url('/index/student/page'));
            } 
            
            // 如果这个classroom_time的状态为1,签到次数加一
            if ($classroom_time->status) {
                $score = Score::where('student_id',$student_id)->where('course_id',$classroom_time->courseinfo->course_id)->find();

                if ($score) {
                    // 如果本学生有本课程的一条数据,签到次数+1
                    $score->arrivals++;
                } else {
                    // 如果没有,新建之
                    $score = new Score;
                    $score->student_id = $student_id;
                    $score->course_id = $classroom_time->courseinfo->course_id;
                    $score->usual_score = 0;
                    $score->exam_score = 0;
                    $score->total_score = 0;
                    $score->arrivals = 0;
                    $score->respond = 0;
                    $score->arrivals++;
                }
                if (!$score->save()) {
                     return $this->error('信息保存异常,请重新扫码', url('/index/student/page'));
                }
            }

大家看看思路就好,完整代码仅供参考

// 学生扫码选座位(新中新)
    public function entercourse()
    {   
        $id = $this->request->param('id');
        
        $classroom_id = substr($id,0,4)*1;
        $row = substr($id,4,2)*1;
        $column = substr($id,6,2)*1;
        $time = Term::littleClass();
        if ($time11) {
            return $this->error('上课时间已结束', url('/index/student/page'));
        }
        $student_id = session('studentId');
        $classroom_time = Classroom_time::where('classroom_id',$classroom_id)->where('littleclass',$time)->find();

        
        $seattable = Seattable::where('student_id',$student_id)->where('classroom_time_id',$classroom_time->id)->find();

        // 如果这个学生原来签过到
        if($seattable) {
            $primaryStudent = Seattable::where('row',$row)->where('column',$column)->where('classroom_time_id',$classroom_time->id)->find();

            // 如果这个座位原来有学生
            if ($primaryStudent) {
                // 如果这个学生是他自己
                if ($primaryStudent->student_id == $student_id) {
                    return $this->error('您已成功扫码选择此座位,请不要重复扫码', url('/index/student/page'));    
                }

                // 通知他


                // 他行列信息清空
                $primaryStudent->row = 100;
                $primaryStudent->column = 100;
                if (!$primaryStudent->save()) {
                    return $this->error('信息保存异常,请重新扫码', url('/index/student/page'));
                }
            }
            

            // 将新的行列数保存到学生那条数据里
            $seattable->row = $row;
            $seattable->column = $column;
            if (!$seattable->save()) {

                return $this->error('信息保存异常,请重新扫码', url('/index/student/page'));
            }

        } else {  // 如果这个学生原来没选过座位
            $primaryStudent = Seattable::where('row',$row)->where('column',$column)->where('classroom_time_id',$classroom_time->id)->find();
            // 如果这个座位原来有学生
            if ($primaryStudent) {
                // 通知他


                // 他行列信息清空
                $primaryStudent->row = 100;
                $primaryStudent->column = 100;
                if (!$primaryStudent->save()) {
                    return $this->error('信息保存异常,请重新扫码', url('/index/student/page'));
                }
            }
             
            // 创建一条新数据
            $seattable = new Seattable;
            
            $seattable->classroom_time_id = $classroom_time->id;
            $seattable->row = $row;
            $seattable->column = $column;
            $seattable->student_id = $student_id;
            $seattable->role = 0;
            if (!$seattable->save()) {
                return $this->error('信息保存异常,请重新扫码', url('/index/student/page'));
            } 
            
            // 如果这个classroom_time的状态为1,签到次数加一
            if ($classroom_time->status) {
                $score = Score::where('student_id',$student_id)->where('course_id',$classroom_time->courseinfo->course_id)->find();

                if ($score) {
                    // 如果本学生有本课程的一条数据,签到次数+1
                    $score->arrivals++;
                } else {
                    // 如果没有,新建之
                    $score = new Score;
                    $score->student_id = $student_id;
                    $score->course_id = $classroom_time->courseinfo->course_id;
                    $score->usual_score = 0;
                    $score->exam_score = 0;
                    $score->total_score = 0;
                    $score->arrivals = 0;
                    $score->respond = 0;
                    $score->arrivals++;
                }
                if (!$score->save()) {
                     return $this->error('信息保存异常,请重新扫码', url('/index/student/page'));
                }
            }
            
        }

        return $this->success('选座成功', url('/index/student/page'));
    }

这个功能还需要每天定时清除数据,包括全部清除seattable表里的数据和classroom_time表里所有status归0,courseinfo变为null。

总结

写功能前确定好思路很重要,不然可能会测出漏洞重新写。

위 내용은 Thinkphp5.1은 학생들이 QR 코드를 스캔하여 좌석을 선택하는 재미있는 기능을 실현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제