我想创建一个“测验”,用户将被问到一个问题,如果用户无法回答,他们无法移动到下一个问题,直到他们正确回答。我知道这个问题可能听起来很简单,但我是编程的新手,我正在尝试创建我的第一个真正的程序。
所以基本上我想知道如果我希望用户能够返回他们的测验,如果他们离开或无法完成它,我应该采取什么方法。这就是为什么我不认为Javascript会工作,因为它不是服务器端,不会保存任何东西。再次抱歉,如果这是非常基本的。
答案 0 :(得分:2)
我会从PHP开始。找到适合您的良好学习环境。学习PHP的基础知识。获取在您的计算机上运行的本地服务器。
这就是我开始的方式......
将您的问题和答案存储在一个数据库中,每个数据库都有一个唯一的ID。
只有在用户正确回答了上一个问题后,才能安全地将用户推进到下一个问题。
将用户的进度存储在某处;无论是服务器端还是用户的计算机(通过会话或cookie)
使用给定的ID创建一个显示问题的页面。 mysite.com/question.php?id=x
现在我们写一些......
测验开始时,设置一个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)