0

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

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

4

3 回答 3

2

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

这就是我将如何开始...

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

  2. 安全地将用户推进到下一个问题,前提是他们正确回答了前一个问题。

  3. 将用户的进度存储在某处;服务器端或用户机器上(通过会话或 cookie)

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

  5. 当用户查看页面时,将该 id 与 COOKIE 进行比较。如果它们匹配,请显示该问题。

现在我们写一些...

当测验开始时,设置一个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

高级问题功能:

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
}

获取答案功能:

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
}

获取问题函数:

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
}

在 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,那么您会对 PHP 感到宾至如归。

于 2012-05-29T06:18:06.947 回答
1

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

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

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

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

于 2012-05-29T05:40:07.807 回答
0

作为初学者没有错。我们都从某个地方开始 :) 您将要使用的一件事是数据库,具体取决于您的服务器类型以及您对服务器的配置您有很多选择,但常见的涉及结构化查询语言:更常用的是 sqlite, mysql 和 sqlserver。如果您打算让他们回来,这将为用户存储数据(此时您可能必须创建一个登录)另一个选项(与登录相反)是使用 php 使用 cookie(因为会话数据仅暂时存储)你的问题很广泛,所以请原谅我只写你可以做到的方式。在数据库中,您可以为用户设置它,您可以创建一个类似“已完成”的表,并在查询数据库时将其设置为 true,以查看问题是否得到正确回答。

于 2012-05-29T05:23:29.650 回答