我之前制作了一个文本文件并将其转换为多维数组,以显示我的测验问题。
注意:我无法插入图片,因此我无法提供任何示例,因此我会尝试尽可能具有描述性。
每次用户点击我的测验时,我都会尝试一次只显示一个问题。
到目前为止,这是我的代码。 main.php 页面:
<h2>ONLINE QUIZ</h2>
<ul>
<li><a href='question.php'>Take quiz</a></li>
<li><a href='module.php'>Admin Module</a></li>
</ul>
<?php
$file = fopen('data.txt', 'r');
$array = array();
while ($line = fgetcsv($file)) {
$array[] = $line;
}
fclose($file);
session_start();
$_SESSION["questions_array"]=$array;
?>
question.php 页面:
<?php
session_start();
$array=$_SESSION["questions_array"];
foreach ($array as $q => $data) {
echo '<p>'.array_shift($data).'</p>';
foreach ($data as $a => $answer) {
echo
' <input type="radio" name="question-'.$q.'" id="question-'.$q.'"'.
' value="'.$a.'"/>'.
' <label for="question-'.$q.'">'.$answer.'</label>'.
'<br>';
}
}
?>
点击Take quiz
链接后,用户将转到问题页面,其中只显示一个问题。然后,用户选择一个答案并点击submit
。此提交按钮会将用户带到结果页面,然后他们可以点击continue
。
Continue
链接会将其重定向回显示下一个问题的问题页面。
从我以前做过的事情中,我试图使用isset()
函数来实现这一点。但问题是,我不确定如何写出我的isset()
。
我从这个网站找到了这个片段,我不确定它是否有用,但是:
if (!isset($_SESSION['FirstVisit'])) {
//show site for the first time part
$_SESSION['FirstVisit] = 1;
header("Location: http://example.com/index.php");
// Don't forget to add http colon slash slash www dot before!
} else { Show normal site }
但我又一次发现自己一片空白。我究竟如何使用isset()
只显示一个问题?
答案 0 :(得分:2)
我有点得到你的要求,我已经记下了基本的结构。这一切都可以在一个页面上完成,希望它有所帮助。
编辑:
正如我这样一个好人继承一个完整的剧本,使用我的上一个建议; p
<?php
session_start();
echo '<h2>ONLINE QUIZ</h2>';
//Scores
if($_SERVER['REQUEST_METHOD']=='GET' && isset($_GET['scores'])){
echo 'Basic output for scores';
echo '<pre>';
print_r($_SESSION['answers']);
echo '</pre>';
unset($_SESSION['answers']);
unset($_SESSION['question']);
}
//Session question/array is set
if(isset($_SESSION['question']) && isset($_SESSION['questions_array'])){
//Handle prev question post
if($_SERVER['REQUEST_METHOD']=='POST'){
//process prev question
$_SESSION['answers'][$_SESSION['question']-1]=(0+$_POST['answer']);
}
if($_SESSION['question'] < $_SESSION['total_question']){
$q=$_SESSION['question'];
//EDIT - Shuffle answers for output
//Hold the question into a var
$question = $_SESSION['questions_array'][$q][0];
//unset the question from the array
unset($_SESSION['questions_array'][$q][0]);
//put all the pos answers into a new array
$answers = $_SESSION['questions_array'][$q];
//shuffle the answers
shuffle($answers);
echo '<form method="POST" action="">
<h3>'.$question.'</h3>';
//loop through the answers
foreach($answers as $key=>$value){
//if the value is nothing cont to next, removed question key 0
if($value==''){continue;}else{
echo '<p><input type="radio" value="'.$value.'" name="answer">'.$value.'</p>';
}
}
echo '<p><input type="submit" value="Submit"></p>
</form>';
}else{
//Quiz Complete
echo 'Test Complete <a href="'.basename($_SERVER["SCRIPT_FILENAME"]).'?scores=1">Check scores</a>';
}
//Assign next question to session
$_SESSION['question']++;
}else{
//Pages first load so show quiz index
$_SESSION['question']=0;
get_questions();
?>
<ul>
<li><a href='<?=basename($_SERVER["SCRIPT_FILENAME"]);?>'>Take quiz</a></li>
<li><a href='module.php'>Admin Module</a></li>
</ul>
<?php
}
//Function to put questions in session
function get_questions(){
$file = fopen('data.txt', 'r');
$array = array();
while ($line = fgetcsv($file,1000,',')) {
$array[] = $line;
}
fclose($file);
$_SESSION['questions_array']=$array;
$_SESSION['total_question']=count($array);
return;
}
?>
答案 1 :(得分:1)
好的,所以你的问题的解决方案是在outter数组上做另一个数组移位。通过这个你可以拉出一个问题然后打印出来。测验将保留在会话中,因此下次加载页面时(即单击“继续”按钮),它会提取下一个问题。
问题页面:
<?php
session_start();
if(sizeof($_SESSION['questions_array']) > 0 )
{
// Get the next question off of the Quiz in our SESSION
$data = array_shift($_SESSION["questions_array"]);
echo '<p>'.array_shift($data).'</p>'; // pop the question
//list out the possible answers
foreach ($data as $a => $answer)
{
echo
' <input type="radio" name="question-'.$q.'" id="question-'.$q.'"'.
' value="'.$a.'"/>'.
' <label for="question-'.$q.'">'.$answer.'</label>'.
'<br>';
}
}
else
{
//questions array is empty, show quiz complete page
}
?>
现在您的问题页面只会带回一个问题。点击提交后,他们会转到答案页面。点击继续后,他们会回来。然后我们的系统如下: 1)我们的阵列中还有问题吗? A)是的 A.1)好吧用array_shift弹出下一个问题($ _ SESSION ['questions_array']) A.2)弹出问题,然后列出答案。 b)否 B.1)没有其他问题,我们的测验结束了。
注意:有一些缺点。如果此人刷新页面,他们会得到一个新问题而另一个人没有得到答复。您也可以传递$ counter变量,每次加载答案页面时都会更新。然后将该计数器传递给$ _SESSION数组以返回下一个问题。这取决于你。