2012-04-19 59 views
2

我之前创建了一个文本文件并将其转换为多维数组以显示为测验的问题。如何在一次在线测验中一次只显示一个数据

注意:我无法插入图像,因此我无法提供任何示例,因此我会尽可能描述一下。

我试图一次只显示一个问题,每次用户点击我的测验。

这是我的代码到目前为止。该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

你可以给我们一个你的$ _SESSION数组的var_dump吗? – 2012-04-19 20:26:36

+0

($ q,$ a,$ answer,$ data) – user1344705 2012-04-19 20:34:39

+0

这不是我要求的.. do var_dump($ _ SESSION [“questions_array”]);在您的问题页面上发布结果。 – 2012-04-19 20:36:02

回答

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; 
} 
?> 
+0

非常感谢!我会尝试这一个出 – user1344705 2012-04-19 20:49:28

+0

它将张贴到它自我多数民众赞成的想法,注意:'<?= basename($ _ SERVER [“SCRIPT_FILENAME”]);?>' – 2012-04-19 20:51:16

+0

嘿,所以我试了这个并没有收到任何错误,但它只是显示一个空白页面。我现在试图找到可能造成这种情况的原因。你有没有想法? – user1344705 2012-04-19 21:00:58

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)好吧弹出array_shift的下一个问题($ _ SESSION ['questions_array']) A.2)弹出问题,然后列出答案。 B)否 B.1)没有更多的问题,我们的测验结束了。

注:有一些缺点。如果这个人刷新页面,他们会得到一个新的问题,另一个则无法回答。您也可以传递每次加载答案页时更新的$ counter变量。然后将该计数器传递给$ _SESSION数组以回到下一个问题。随你便。

+0

也就是说,“流程图”当它没有推到一起时看起来好多了。 – 2012-04-19 21:02:07

+0

谢谢你的帮助!这段代码是否需要一个新的页面,或者我可以将其添加到我的问题页面? - 我试图将其添加到我的问题页面,并且页面仍显示所有问题:( – user1344705 2012-04-19 21:09:16

+0

您是否替换了您所拥有的内容?我是说用这个而不是你在问题中列出的内容。 。把它放在你的问题页面上,而不是你所拥有的。 – 2012-04-19 21:10:40