我想做一个网页英语单词测验的程序
这思路不知道正确不正确
运行不出,请教各位
代码如下<?php
session_start();header("Content-Type: text/html; charset=utf-8");$connect = mysql_connect("localhost","root","123456");mysql_query("set names 'utf8'");$select = mysql_select_db("ceyan");if($_POST['xcs'] != 'send')  //如果按下 send  按纽
{  $i = $_SESSION['i'];  $dcb = $_SESSION['dcb'];  $zwb = $_SESSION['zwb'];  $key = $_POST['key'];  $dt = $_SESSION['dt'];
  
  if($key == $dcb[$i])
  {
    $dt[$i] = 1;
  }
  
  else
  {
    $dt[$i] = 0;
  }  $i++;}if($_POST['xcs'] != 'over')  //如果按下over按钮
{
  $i = $_SESSION['i'];  $dcb = $_SESSION['dcb'];  $zwb = $_SESSION['zwb'];  $key = $_POST['key'];  $dt = $_SESSION['dt'];  $allt = sizeof($dt); //计算一共有多少题目  $zq = array_count_values ($dt);  //取答对的题目数  $fenshu = 100 / $all * $zq;  echo "得分是".$fenshu;  //计算得分  unset($dcb);  unset($zwb);  unset($dt);
}else
{  $sql = "select * from `chb` order by rand()";  $tmpch = mysql_query($sql,$connect);  while($ch=mysql_fetch_array($tmpch))
  {
    $dcb[] = ch['dc'];    //存放数据库词汇表的英文单词部分
  
    $zwb[] = ch['zw'];    //存放数据库词汇表的中文解释部分
  }
  $i=0;  //计数器  $dt = array();  //存放用户提交的答题对错,1为答对,2为答错}  $_SESSION['i'] = $i;  $_SESSION['dcb'] = $dcb;  $_SESSION['zwb'] = $zwb;  $_SESSION['dt'] = $dt;  echo "<div style='margin:0px 0px 0px 600px>";  echo "<span style='margin:5px 0px 5px 0px'>".$zwb[$i]."</span><br />";  echo "</div>";  echo "<div style='margin:0px 0px 0px 600px>
         <form action='http://localhost/danci/pxll.php?i='".$i."' name='xcs' method='post'>
    <span><input type='text' name='key' size='10' maxlength='15' /></span><br>
    <span><input type='submit' name='send' value='提交并进入下一题' /></span>
    <span><input type='submit' name='over' value='结束评分' /></span>
  </form>
        </div>";  mysql_close($connect);?>

解决方案 »

  1.   

    if($key == $dcb[$i])
      {
        $dt[$i] = 1;
      }
      
      else
      {
        $dt[$i] = 0;
      }看你这里,应该是 1为答对,0为答错吧
    可是你这里的注视说1为答对,2为答错。$dt = array();  //存放用户提交的答题对错,1为答对,2为答错
    另外,你似乎把对题和错题都存在了$dt这个数组里,那你下面又取了$dt整个数组的长度,这样怎么判断答对题的数量?要么错题就不存,要么就判断一下这个数组里为1的有几个值。
    $zq = array_count_values ($dt);  //取答对的题目数
    你的整个程序设计的很不好,你可以不用答一题提交一次,可以将所有答案都暂时存在客户端,用js的数组保存或存在一个hidden域里面。然后一次性提交到服务器端与数据库比较进行判分。不过这样设计还是有缺陷,如果你的所有题目分数都一样还可以,如果有不一样的怎么办?只存1或0肯定不行。你需要存一个题目id和答对这题的分数。
      

  2.   

    对,LS说的对
    计算分数时应该写成$fenshu = 100 / $all * $zq[1];
    我是这么想的,答对题的分数是按照有多少题目来算的,所以用这个方法来做了.
    因为看到开心网上有类似的答题方法,所以想试着做做
    看来一定要用JS了?
      

  3.   

    今天刚来啊哈哈
    没分
    以后有分补上
    顺便一问

    Parse error: syntax error, unexpected '[' in E:\Apache2.2\htdocs\danci\left\pxll.php on line 79
    这个错误
    是哪不对吗
    我这个程序逻辑上有问题吗
      

  4.   

    嗯,用js先将用户回答的问题存在客户端的一个哈希表或数组里面。我觉得这样设计比较好:1 首先将数据库中要进行显示的题目查出来放到php的一个数组里面,然后你可以分页显示(一页显示一道题或几道题),也可以一次性所有题目都显示出来。可以通过对数组的控制来实现。
    2 设置一个开始答题的按钮,当用户点击这个按钮后,设置一个倒计时时间,为答题时间。
    3 用户输入的选项或填写的答案,临时存在js的一个哈希表或数组中。结构为:题目id => 答案。
    4 当用户答完所有题目或点击一个结束答题按钮时。先将数组转化为json格式,然后用ajax把这个数组以及答题时间提交到服务器端
    5 服务器端对json进行解析,判题,然后根据答题时间以及答题的正确数量计算得分。按照一个固定格式拼成一个结果字符串返回给客户端。
    6 客户端获得reponse,将结果显示在一个div里面。
      

  5.   

    恩我试试
    谢谢ShadowSniper
    顺便BS下剑心哈哈