用PHP做多项选择题,数据库怎么设计, 代码怎么写....

视图页面是这样的.问题和答案是从数据库里面遍历出来的,我是这样设计的.总感觉这样设计错的..问题表:tbl_answer第二张表不知道怎么设计了....求大神详解....... 视图页面是这样的.

问题和答案是从数据库里面遍历出来的,
我是这样设计的.总感觉这样设计错的..

问题表:tbl_answer 第二张表不知道怎么设计了....

求大神详解....
处理页面不知道怎么写...question是正确答案.
展开
 我来答
xiii130
推荐于2017-12-15 · 知道合伙人软件行家
xiii130
知道合伙人软件行家
采纳数:817 获赞数:2867
爱好编程,在工作中积累了比较丰富的经验。愿与大家共同进步。

向TA提问 私信TA
展开全部

常规思路


表1(问题)

question

id(主键)    text(问题内容)    rightAnswer(正确答案)


表2(备选答案)

answer

id(主键)    qid(对应的问题id)    text(备选答案)


$sql="SELECT * FROM question";
$r = mysql_query($sql);
while($row = mysql_fetch_rows($r)){
    //输出题干
    echo $row[1];
    $subsql="SELECT * FROM answer WHERE qid = '".$row[0]."'";
    $subr = mysql_query($subsql);
    while($subrow = mysql_fetch_rows($subr)){
        //输出备选答案
        echo subrow[2];
    }
}


我相信这是比较主流的设计思路,希望的帮到你


至于比对答案的时候,有一种简单做法,你传回来的答案不是数组吗,将数据库正确答案以字符串形式输出,打散成数组,求2个数组的交集,根据交集数量判断正确个数


不懂欢迎追问

更多追问追答
追问
额..如果我说是要做一个类似问卷调查的系统, 不需要对比答案,只需要把勾选的信息保存下来,数据库怎么设计, 代码怎么写.....
就是说一个用户当填完这些调查项点击确定后,我得把这些结果保存到一条数据里面,如何设计数据库,和代码,,,, 使得保存下来的问卷结果便于观察对比..
不好意思..麻烦了..
可以再加财富值的..
追答
如果是调查问卷的话,实际上也不建议存到一个字段里边

因为对于调查问卷收集过来的数据,大多都是要处理的,或统计,或加权,你如果放到一个字段里的话,那处理起来是会相当麻烦的

是我的话,做法应是这样

答案表
answer
id(主键)qid(对应问题)text(备选答案)

问卷结构保存表
mySelect
id(主键)aid(对应答案表的主键)uid(用户表对应主键)selected(用户选择的答案)

保存结果时,这样存,以后你在取数据的时候就相当方便

取某一用户的所有答案
SELECT * FROM mySelect WHERE uid='用户id'

取某一问题所有用户的答案
SELECT * FROM mySelect WHERE aid='答案id'

取某一用户某一题的答案
SELECT * FROM mySelect WHERE aid='答案id' AND uid='用户id'

取某一用户对于某一问卷的所有答案
SELECT A.* FROM answer A,question B WHERE A.qid=B.id AND B.id='问题id' AND A.uid='用户id'
文江博客
2013-12-04 · TA获得超过257个赞
知道小有建树答主
回答量:569
采纳率:50%
帮助的人:365万
展开全部

数据库的设计本人认为可以这样,提交表单应该再设置一个隐藏域,储存题目ID,例如

<input type="hidden" value="<?php echo $row['id']?>" name="an_id">


处理页面可以使用将获取到的答案数组 $_POST['itm']进行遍历,用循环$value查找question,可以使用函数strpos(),该函数如果返回数字,则是正确答案,如果返回false,则是错误答案


if(isset($_POST['an_id'])){
  $an_id = $_POST['an_id'];
  $qus_sql = "select `question` from `vote_answer` where id = $an_id";
  $query = mysql_query($qus_sql);
  while($row = mysql_fetch_row($query)){
    $question = $row[0];
  }
  $user_question = $_POST['itm'];
  foreach($user_question as $value){
    if(strpos($question,$value){
      echo '正确答案';
    }else{
      echo '错误答案';
    }
  }
}

全手写代码,有错误请百度HI我!

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
根号叁科技
2013-12-04 · 知道合伙人软件行家
根号叁科技
知道合伙人软件行家
采纳数:200 获赞数:1123
本科毕业于山东理工大学物理学专业,硕士就读于南京理工大学模式识别与智能系统。

向TA提问 私信TA
展开全部
答案表至少需要3个字段,一个type(用来表明a.b.c.d)一个summary (用来文字描述答案)还有一个fid(用来指向问题的Id)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飲鴆_止渴
2013-12-04 · TA获得超过1232个赞
知道小有建树答主
回答量:400
采纳率:0%
帮助的人:542万
展开全部
我先提供一下我自己的思路,不使用这么多字段,只需要几个即可,如下:
id answer questions question
1 四大... 火_指_造_印 火_指_造_印
2 运动 中_篮_排_棒 排_棒
...

然后,在读取问题的时候,将预设答案以下划线分隔开,得预设答案。
而用户选择答案提交后,将用户提交的答案以下划线合并,再与数据库的正确答案比较。
不知这样如何?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式