php+mysql 单选题测试网页
最近要用PHP+mysql做一个在线单选题测试,共50题,每次随机抽取5道题让用户选择,请问我该如何建表、怎么随机出题效果更好、随机题目出来选择答案之后如何跟存在数据库内...
最近要用PHP+mysql做一个在线单选题测试,共50题,每次随机抽取5道题让用户选择,请问我该如何建表、怎么随机出题效果更好、随机题目出来选择答案之后如何跟存在数据库内的答案进行匹配。请给一个思路,谢谢!
展开
2个回答
展开全部
最近要用PHP+mysql做一个在线单选题测试,共50题,每次随机抽取5道题让用户选择,请问我该如何建表、怎么随机出题效果更好、随机题目出来选择答案之后如何跟存在数据库内的答案进行匹配。搜索请给一个思路,谢谢!
一、库表结构设计
首先,要有个试题登记表,我们暂且定该表名为 Questions 吧。这个表至少要有如下字段:
1、题号:id,正整数,INT
2、原题:ask,长度8000的字符串,VARCHAR(8000)
3、备选答案1:answer1,长度2000的字符串,VARCHAR(2000)
4、备选答案2 :answer1,长度2000的字符串,VARCHAR(2000)
5、备选答案3:answer1,长度2000的字符串,VARCHAR(2000)
6、备选答案4:answer1,长度2000的字符串,VARCHAR(2000)
7、正确选择:solution,整数型,INT
第二,必须有一个考生登记表,我们暂且定该表名为 Candidates 吧。这个表至少要有如下字段:
1、考号:No,CHAR(10)
2、姓名:name,CHAR(10)
3、身份证号:id,CHAR(18)
4、加密处理过的密码:passwd,CHAR(32)
5、正面大头照片:photo,TINYBLOB
第三,必须有一个考试登记表,我们暂且定该表名为 Examination 吧。这个表至少要有如下字段:
1、考号:No,CHAR(10)
2、时间:tWhen,DATETIME
3、第一题号:Q1,INT
4、第二题号:Q2,INT
5、第三题号:Q3,INT
6、第四题号:Q4,INT
7、第五题号:Q5,INT
8、得分:score,INT
二、程序流程设计
首页是登录用的 form,让参加考试的人输入考号与密码,提交以后的后台处理是:把他/她提交的密码按加密规则进行加密运算,按 where (No=XXX) and (passwd=YYY) 查询(select)库表 Candidates ,如果返回1行则向前端浏览器发回“登录验证完毕,准备开考”的提示,该提示得到确认后,后台启动随机数产生程序——调用生成0-1之间随机数的函数得到的值乘于50,得到的结果四舍五入取整生成第一个数,生成第二个数后就要与第一个得到的数做比较,如果重复了就重来一次生成过程,生成第三个数时就跟前2个比较,重复了则重来,最后生成5个不重复的数作为题号,第四第五个题号产生过程类似。得到五个题号后,把它们与考号、当前时间记入 Examination表的相应字段,然后就可以发送第一题的页面作为对考生确认准备开考的回应了。
每一题的页面的运行过程是:以考号、第几题为参数从 Examination 表查出该题的题号,接着从 Questions 中选出该题的原题、4个备选答案放在 form 内显示给考生供考生选择。考生选择并确认后,后台的响应程序会把他/她的选择与 Questions 表内的该题的正确选项对比,如果正确则给考生的得分栏加1,否则就不加。网页内隐藏有 JavaScript 写的计数器,时间到了考生不做选择则会自动发送请求下一题(或考试结束通知)的请求。至于计时器的编写你就参考网上别人写的小时钟程序吧。
有了这些以后,其它辅助的页面就简单了,无非就是考生的报名、考后的成绩查询等,不用我再给你说你也该知道怎么做了。
一、库表结构设计
首先,要有个试题登记表,我们暂且定该表名为 Questions 吧。这个表至少要有如下字段:
1、题号:id,正整数,INT
2、原题:ask,长度8000的字符串,VARCHAR(8000)
3、备选答案1:answer1,长度2000的字符串,VARCHAR(2000)
4、备选答案2 :answer1,长度2000的字符串,VARCHAR(2000)
5、备选答案3:answer1,长度2000的字符串,VARCHAR(2000)
6、备选答案4:answer1,长度2000的字符串,VARCHAR(2000)
7、正确选择:solution,整数型,INT
第二,必须有一个考生登记表,我们暂且定该表名为 Candidates 吧。这个表至少要有如下字段:
1、考号:No,CHAR(10)
2、姓名:name,CHAR(10)
3、身份证号:id,CHAR(18)
4、加密处理过的密码:passwd,CHAR(32)
5、正面大头照片:photo,TINYBLOB
第三,必须有一个考试登记表,我们暂且定该表名为 Examination 吧。这个表至少要有如下字段:
1、考号:No,CHAR(10)
2、时间:tWhen,DATETIME
3、第一题号:Q1,INT
4、第二题号:Q2,INT
5、第三题号:Q3,INT
6、第四题号:Q4,INT
7、第五题号:Q5,INT
8、得分:score,INT
二、程序流程设计
首页是登录用的 form,让参加考试的人输入考号与密码,提交以后的后台处理是:把他/她提交的密码按加密规则进行加密运算,按 where (No=XXX) and (passwd=YYY) 查询(select)库表 Candidates ,如果返回1行则向前端浏览器发回“登录验证完毕,准备开考”的提示,该提示得到确认后,后台启动随机数产生程序——调用生成0-1之间随机数的函数得到的值乘于50,得到的结果四舍五入取整生成第一个数,生成第二个数后就要与第一个得到的数做比较,如果重复了就重来一次生成过程,生成第三个数时就跟前2个比较,重复了则重来,最后生成5个不重复的数作为题号,第四第五个题号产生过程类似。得到五个题号后,把它们与考号、当前时间记入 Examination表的相应字段,然后就可以发送第一题的页面作为对考生确认准备开考的回应了。
每一题的页面的运行过程是:以考号、第几题为参数从 Examination 表查出该题的题号,接着从 Questions 中选出该题的原题、4个备选答案放在 form 内显示给考生供考生选择。考生选择并确认后,后台的响应程序会把他/她的选择与 Questions 表内的该题的正确选项对比,如果正确则给考生的得分栏加1,否则就不加。网页内隐藏有 JavaScript 写的计数器,时间到了考生不做选择则会自动发送请求下一题(或考试结束通知)的请求。至于计时器的编写你就参考网上别人写的小时钟程序吧。
有了这些以后,其它辅助的页面就简单了,无非就是考生的报名、考后的成绩查询等,不用我再给你说你也该知道怎么做了。
追问
能否给出一些按照您给的数据表结构写的随机出题和匹配答案的简短代码,有些不明白题库表备选答案怎么写在form里面并且提交匹配。
追答
没搞过PHP网页访问MySQL数据库的编程吗?
昨天下午帮你写前面那段简单设计就抽掉了5支烟、喝掉了1杯咖啡,你还没给我付钱呢。
展开全部
如果只是这个单一的功能的话那就很简单
一张表就好了
id faq answer
三个字段就够了
faq放题目内容
answer放答案,格式为 A;A XXX;B XXX;C XXX;D XXX
用分号隔开,第一个为正确答案,后面四个分别为四个备选答案
随机五道题
select * from table order by rand() limit 5;
希望我的答案能帮助你
一张表就好了
id faq answer
三个字段就够了
faq放题目内容
answer放答案,格式为 A;A XXX;B XXX;C XXX;D XXX
用分号隔开,第一个为正确答案,后面四个分别为四个备选答案
随机五道题
select * from table order by rand() limit 5;
希望我的答案能帮助你
追问
题目随机出来之,用户答完后如何跟存在表内的正确答案进行匹配?
追答
答案正确与否最好在服务器判断,若用js判断容易被人作弊。
form将题目id和用户所选的答案提交到服务器
根据题目id从数据库中获取到正确答案,跟提交的答案进行比较就好了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询