作业帮 > 综合 > 作业

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

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/15 18:02:58
用PHP做多项选择题,数据库怎么设计,代码怎么写.
视图页面是这样的.

问题和答案是从数据库里面遍历出来的,

我是这样设计的.总感觉这样设计错的..

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


处理页面不知道怎么写...question是正确答案.
常规思路

表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'
再问: 这样设计确实便于管理....请问处理页面该怎么写....数组什么的确实没学好... - -
再答: 敢情你是要一条龙服务啦?问题和备选答案还是像我刚才那样写<?
$sql="SELECT * FROM question";
$rt = mysql_query($sql);
while($row = mysql_fetch_rows($rt)){
    //输出题干
    $subsql="SELECT * FROM answer WHERE qid = '".$row[0]."'";
    $subr = mysql_query($subsql);
    $i = 0;
    while($subrow = mysql_fetch_rows($subr)){
    //input的name是ans和答案id组合成的数组
        echo '<input type="checkbox" name="ans'.$subrow['0'].'[]" value="'.$i.'">';
        $i ++;
    }
}

//提交表单,处理,这里需要把答案所属问题的id传过来,方式不限
$sql="SELECT id FROM answer";
$r = mysql_query($sql);
while($row = mysql_fetch_row($r)){
$idx = 'ans'.$row[0];
$arr = $_POST[$idx];
if(is_array($arr)){
foreach($arr as $k=>$v){
$insertsql="INSERT INTO answer VALUES ('主键','问题id','".$_SESSION['用户id']."','".$v."')";
}
}
}
?>这里应该写的比较清楚了,细节问题,你可以慢慢调试,这样写可以支持多选