Rumah > rangka kerja php > ThinkPHP > Thinkphp5.1 menyedari fungsi menyeronokkan pelajar mengimbas kod QR untuk memilih tempat duduk

Thinkphp5.1 menyedari fungsi menyeronokkan pelajar mengimbas kod QR untuk memilih tempat duduk

藏色散人
Lepaskan: 2021-10-09 10:28:19
ke hadapan
2219 orang telah melayarinya

Kata Pengantar

Tujuan fungsi ini adalah untuk menggunakan QR pelajar kod untuk memilih tempat duduk sebagai fungsi berasingan Dengan pelaksanaan fungsi berasingan, guru boleh menyemak tempat duduk pelajar yang dipilih tanpa log masuk. Guru juga boleh log masuk untuk mengikat kursus dan mengira bilangan daftar masuk pelajar untuk kursus ini. Guru boleh melaksanakan beberapa fungsi tanpa pendaftaran dan log masuk yang membosankan. Mereka juga boleh menggunakan produk ini untuk mencipta kursus dan mengikatnya, supaya menggunakan produk untuk mengira bilangan log masuk pelajar. Ini akan meningkatkan pengalaman guru dengan produk ini dan meningkatkan jumlah pengguna dengan berkesan.
Artikel ini secara khusus bercakap tentang pelaksanaan fungsi pengimbasan kod pelajar, dan butiran lain tidak akan dibincangkan secara terperinci.

Persediaan awal

1 Buat jadual untuk setiap bahagian setiap bilik darjah, di sini dipanggil classroom_time Data ini harus dijana secara automatik apabila menambah medan bilik darjah kepada 11 hari contoh, dalam bahagian ini, setiap bilik darjah menjana 11 medan masa_kelas, seperti yang ditunjukkan dalam rajah.
Thinkphp5.1 menyedari fungsi menyeronokkan pelajar mengimbas kod QR untuk memilih tempat duduk

2. Setiap tempat duduk juga harus disimpan dalam medan untuk menyimpan nombor baris dan lajurnya, dan ID pelajar serta class_time_id yang sepadan digunakan untuk menyimpan bilik darjah dan bahagian mana tempat duduk tersebut. tempat duduk. Kami memanggilnya meja tempat duduk di sini, yang pada mulanya ialah 0 keping data.
Thinkphp5.1 menyedari fungsi menyeronokkan pelajar mengimbas kod QR untuk memilih tempat duduk

3 Buat halaman web untuk memaparkan carta tempat duduk kelas_masa
Thinkphp5.1 menyedari fungsi menyeronokkan pelajar mengimbas kod QR untuk memilih tempat duduk

4 ID bilik darjah, nombor baris dan baris, dan harus ada kod QR yang berasingan untuk melihat carta tempat duduk Ia boleh memaparkan secara langsung pemilihan tempat duduk pelajar tanpa log masuk.
Thinkphp5.1 menyedari fungsi menyeronokkan pelajar mengimbas kod QR untuk memilih tempat duduk

Fungsi pengimbasan kod pelajar kami digunakan terutamanya untuk mengendalikan data meja meja duduk.

Pelaksanaan fungsi pengimbasan kod pelajar

1 Dapatkan maklumat asas tempat duduk ini melalui url
Dapatkan nombor baris, kelas_id dan nombor baris tempat duduk ini melalui url yang diluluskan. masuk dengan mengimbas kod Dapatkan id_pelajar dan nombor bahagian melalui kaedah statik Nombor bahagian dipanggil masa di sini. Pada masa yang sama, tanya satu-satunya waktu_kelas melalui bahagian dan id bilik darjah

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 ;
    }
Salin selepas log masuk
Dapatkan bahagian di sini dan nilai pada masa yang sama Jika ia melebihi bahagian kesebelas, ini bermakna masa kelas telah tamat dan kembali ke laman utama pelajar.

2. Gunakan id kelas_masa dan id pelajar untuk mencari sama ada terdapat medan ini dalam jadual meja tempat duduk Ia ditakrifkan sebagai $seattable di sini 🎜>. $seattable

$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'));~~~~
Salin selepas log masuk
Berikut ialah contoh Apabila pelajar memasuki bilik darjah, akan ada sekeping data Apabila dia memilih tempat duduk, bilangan baris dan baris akan diisi. Jika orang lain mengambil tempat duduknya, bilangan baris dan barisnya akan dikosongkan Ini bersamaan dengan Dia belum membuat tempat duduk, tetapi dia masih berada di dalam bilik darjah, dan data ID pelajar wujud, yang berguna untuk guru menambah satu pada. nombor log masuk semasa mengikat kursus.
Idea yang saya tulis pada asalnya adalah untuk mencipta data baharu, menetapkan bilangan baris dan lajur, dan mengosongkan ID pelajar Ini akan menyebabkan orang lain mencuri kedudukannya Apabila dia mengimbas kod itu semula, dia tidak boleh menilai sama ada imbasan kedua atau imbasan pertama, jadi dia tidak boleh mengira dengan tepat jumlah bilangan log masuk pelajar.
Mewujudkan idea untuk menukar nilai baris dan lajur student_id adalah kunci untuk merealisasikan fungsi ini.
3 Jika pelajar telah mendaftar masuk

Dalam dua kes, tempat duduk ini pada asalnya diduduki, dan tempat duduk ini pada asalnya tidak berpenghuni
Jika ada seseorang, semak dahulu sama ada orang itu adalah dirinya sendiri, jika jadi, terus gesa dan Kembali ke halaman utama pelajar, jika tidak, dapatkan sekeping data tentang pelajar asal tempat duduk ini, maklumkan orang asal bahawa seseorang telah menduduki tempat duduk itu, kosongkan data baris orang asal dan isikan nombor baris.
Tiada sesiapa yang mengisi secara langsung bilangan baris dan lajur.

$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'));
    }
Salin selepas log masuk
Contoh: Saya (nama saya Zhang San) pada asalnya mengimbas kod dan terdapat seseorang di tempat duduk tempat saya mengimbas kod itu.

Sebelum mengimbas kod QR

Thinkphp5.1 menyedari fungsi menyeronokkan pelajar mengimbas kod QR untuk memilih tempat dudukSelepas mengimbas kod QR

Thinkphp5.1 menyedari fungsi menyeronokkan pelajar mengimbas kod QR untuk memilih tempat duduk

Kerana baris dan baris akan diisih kemudian, untuk mengelakkan dikosongkan baris dan baris daripada memaparkan nama, kami Di sini baris dan lajur ditetapkan semula kepada 100,100 (nilai maksimum bagi baris dan lajur).
4 Jika pelajar belum mendaftar masuk, kami akan tentukan dahulu sama ada tempat duduk itu telah diduduki, maklumkan dahulu dan kosongkan nombor baris. Jika anda belum melog masuk ke meja tempat duduk, tiada data id_pelajar dan id_masa_kelas yang sepadan Pada masa ini, terus buat $meja tempat duduk dan isikan id_pelajar dan nombor baris dan lajur Jika status_masa->kelas sepadan $seattable ialah 1 (status A status 1 bermakna ia telah terikat dengan kursus, status 0 bermakna ia tidak terikat kepada kursus), dan kemudian jumlah bilangan log masuk ialah 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'));
                }
            }
Salin selepas log masuk

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

// 学生扫码选座位(新中新)
    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'));
    }
Salin selepas log masuk

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

总结

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

Atas ialah kandungan terperinci Thinkphp5.1 menyedari fungsi menyeronokkan pelajar mengimbas kod QR untuk memilih tempat duduk. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
php
sumber:segmentfault.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan