制作一个类似于测验的测验

时间:2012-05-29 05:16:33

标签: php javascript html5

我想创建一个“测验”,用户将被问到一个问题,如果用户无法回答,他们无法移动到下一个问题,直到他们正确回答。我知道这个问题可能听起来很简单,但我是编程的新手,我正在尝试创建我的第一个真正的程序。

所以基本上我想知道如果我希望用户能够返回他们的测验,如果他们离开或无法完成它,我应该采取什么方法。这就是为什么我不认为Javascript会工作,因为它不是服务器端,不会保存任何东西。再次抱歉,如果这是非常基本的。

3 个答案:

答案 0 :(得分:2)

我会从PHP开始。找到适合您的良好学习环境。学习PHP的基础知识。获取在您的计算机上运行的本地服务器。

这就是我开始的方式......

  1. 将您的问题和答案存储在一个数据库中,每个数据库都有一个唯一的ID。

  2. 只有在用户正确回答了上一个问题后,才能安全地将用户推进到下一个问题。

  3. 将用户的进度存储在某处;无论是服务器端还是用户的计算机(通过会话或cookie)

  4. 使用给定的ID创建一个显示问题的页面。 mysite.com/question.php?id=x

  5. 当用户查看页面时,将该ID与COOKIE的内容进行比较。 如果匹配,请显示该问题。
  6. 现在我们写一些......

    测验开始时,设置一个cookie ..

    setcookie('name', '0'); //start at 0
    

    当用户选择问题的答案时;将该选择与数据库中的选择进行比较...... 检查答案:

    public function checkAnswer() { 
          $questionid = $_POST['id'];//separate this question from the others
          $useranswer = $_POST['answer'];//get user's answer
          $dbanswer = getAnswer($questionid); //call a function that retrieves and returns the answer from the database, based on the given id (as an argument).
    
      if ($useranswer == $dbanswer)://compare answers
         andvanceQuestion();//advance to the next question
      else:
         incorrectAnswer();//tell user their answer was incorrect.
      endif;
    }//end checkAnswer
    

    advanceQuestion功能:

    public function advanceQuestion() {
       $currQuestion = $_COOKIE['name'];//get cookie value
       $nextQuestion = $currQuestion + 1;//increment cookie value
       $setcookie('name', $nextQuestion);//update cookie value
       header("location: /mysite/question.php?id=$currQuestion");//go to next question
    }
    

    getAnswer功能:

    public function getAnswer($id) {
       $query = mysql_query("SELECT * FROM questions WHERE id='$id'");//simple mysql syntax
       $question = mysql_fetch_assoc($query);//create array of all the entries given by $query
       $answer = $question['answer'];//select the 'answer' field from the array
    
       return $answer;//return the value
    }
    

    getQuestion函数:

    public function getQuestion($id) {
       $query = mysql_query("SELECT * FROM questions WHERE id='$id'");
       $question = mysql_fetch_assoc($query);//create array of all the entries given by $query
       $question = $question['question'];//select the 'question' field from the array
    
       return $question;//return the value
    }
    

    on question.php:

    if(isset($_POST['answer']))://check if form was submitted
       $class->checkAnswer();//check
    endif;
    
    if (isset($_COOKIE['name']) && isset($_GET['id']))://check for url param and cookie
       if (!$_COOKIE['name'] == $_GET['id'])://compare the two
          header("location: mysite.com/CHEATER.php");//if they DONT match, CHEATER!
       else:
          ?>
          <p>Who is the world's best Programmer?</p><!--Get question from db-->
          <form method="post">
              <!--For each option found with question, echo them.-->
              <input type="hidden" name="id" value="<?php echo $_GET['id']?>"/>
              Steve Jobs <input type="radio" name="answer" value="jobs"><br/>
              Steve Wozniak <input type="radio" name="answer" value="woz"><br/>
              Me? <input type="radio" name="answer" value="me"><br/>
              <input type="submit"/>
          </form>
          <?php
       endif;
    endif;
    

    Kinda写了这么快,请原谅任何小的语法错误。

    这就是它。但是,您可以为自己做的最好的事情是在编写大型应用程序之前研究您将使用的语言。尽量避免复制和粘贴代码。总是自己写。并坚持下去。如果您可以编写Javascript,那么您将感觉宾至如归。

答案 1 :(得分:1)

如果您是初学者,请从简单的事情开始。当您开始构建应用程序时,请首先考虑您需要的内容(计划)。有时功能的顺序很重要,有时它们并不重要。

在这种情况下,您可以首先进行测验,而不记住用户,但阻止继续。在第一阶段,您不需要DB,只需要一个简单的(甚至是一页)应用程序。你的申请应该:

1. show question to user
2. show answer possibilities to user
3. ask user response
4. intepret that response
5. if wrong, ask same question again, if right proceed to next, either way goto step 1

无论何时完成,您都可以进入第2阶段,“记住用户”。我认为,最简单的方法是将用户问题编号存储到cookie 。我知道这不是最好的解决方案,有“漏洞”,用户无论如何都可以提出问题,但这对于初学者程序员来说是一个开始。在PHP中类似于:

setcookie("question", $value);       <-- to set
$question = $_COOKIE["question"];    <-- to get value of cookie

看看:http://php.net/manual/en/function.setcookie.php

还有其他方法可以继续进行,包括用户注册/登录以及所有这些,但我认为这绝对不是“第一个真正的程序”。

答案 2 :(得分:0)

成为初学者并没有错。我们都从某处开始:) 你想要使用的一件事是数据库 根据您的服务器类型以及服务器的配置,您有很多选择,但常见的选项涉及结构化查询语言:更常用的是sqlite,mysql和sqlserver。这将为用户存储数据,如果您打算让他们回来(此时您可能需要创建登录) 另一种选择(与登录相对)是使用php的cookie(因为会话数据只是临时存储) 你的问题相当广泛,请原谅我只能写出你能做到的方法。 在数据库中,您可以为用户设置它,您可以创建像“完成”这样的表,并在查询数据库时将其设置为true,以查看问题是否得到了正确回答。 如果没有回答,请以某种方式订购问题,以便按所选订单等打印出来。