基于thinkphp5开发的微信线上答题

2019.5.21

缺少tp核心框架文件和static样式文件

thinkphp

链接:https://pan.baidu.com/s/1v2tFcZ5ha5uqrHl_sIsg3w
提取码:42mx

public/static

链接:https://pan.baidu.com/s/1aS4E660eHZH92H_kpR8aXA
提取码:m7tt
 

最近学校要求应五四青年节做一个微信端的线上答题,苦逼学生党在网上没找到合适的源码,又没钱买微擎的模块,只能琢磨着自己做一个。。首先前端选择用weui,后台选择tp5开发,数据库mysql。。。开发过程中也遇到了些问题,所以记录下来,源码在文章最后

先上效果图

基于thinkphp5开发的微信线上答题_第1张图片基于thinkphp5开发的微信线上答题_第2张图片基于thinkphp5开发的微信线上答题_第3张图片基于thinkphp5开发的微信线上答题_第4张图片基于thinkphp5开发的微信线上答题_第5张图片

 

数据库设计

tk表:题库

基于thinkphp5开发的微信线上答题_第6张图片

导入数据

基于thinkphp5开发的微信线上答题_第7张图片

 

user表:用户

基于thinkphp5开发的微信线上答题_第8张图片

插入测试的数据

基于thinkphp5开发的微信线上答题_第9张图片

 

 

问题一:实现随机答题功能

    思路一:

    比如答20道题,先从数据库随机抽取20道题,用tp5的{volist}标签一次性循环出来,并给每道题目加上style="display:none",先隐藏起来,每道题目分配一个id,id是循环出来的键值k,写个if条件 if k=1 说明是第一题,用jquery去掉display:none。。这样可以实现点击答案后显示下一题。 

        如何判断用户选择的答案是否正确? 我们循环tk表中的trueoption字段,在答题的html 放一个input标签,value值为循坏出来的正确答案,type设为hidden,由于是在微信端,我选择了直接用在js判断答案是否正确。等用户答完全部的题目再将结果传到控制器中处理。    



  
    答题
    










  

  

   {volist name="res" id="vo" key="k" }
        {if condition="$k eq '1'"}
            
{else /} {/volist}

 

    思路二:

    用ajax将答案传到控制器判断是否是正确答案,并随机抽取下一题渲染到模板,循坏这个过程。由于当时时间有点急,我并没有选择这种方案,有兴趣的老铁可以试试

 

问题二:答题样式重叠

    这个问题是在上线后才发现的,是因为用户手速过快,hide延迟函数没来得及执行完就显示下一题(顺便吐槽一句,法克,点这么快是要去投胎吗)大概是这样的

                                                      基于thinkphp5开发的微信线上答题_第10张图片

 这个只要将延迟函数的数值调小一点就可以了

$(this).parents("div").delay(50).hide(0); //调成合适的数值

问题三:最后一题显示不出来

    这个问题也是上线后才发现的,(当初找bug找得心态都爆炸了)抽取了20题,用户反映答到19题,第二十题显示不出来

    这个问题是因为数据库的tk表题库的id不连续造成的,当初我是随便上网找了个算法来实现随机取数据库题,算法本身没什么毛病,至于怎么找到这个bug的,就从算法所在的控制器中找,结果取出来之后,直接print_r($xxx);die; 再看下数据库就能发现了

基于thinkphp5开发的微信线上答题_第11张图片

就是少了个id为5的题目,只要将题库最后一题的id改为5就行了

 

使用方法

 我的公众号是授权了腾讯微校,所以在腾讯微校的拓展里添加扩展功能就行了

基于thinkphp5开发的微信线上答题_第12张图片

更改database.php 改为自己的数据库和密码

application/index/index.php

reg.php

修改为自己域名地址

最后附上源码

https://gitee.com/gdhsxuan/dt

你可能感兴趣的:(php)