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()只显示一个问题?

4

2 回答 2

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;
}
?>
于 2012-04-19T20:44:09.467 回答
1

好的,因此您的问题的解决方案是在外部阵列上进行另一个阵列移位。这样,您可以提出一个问题并将其打印出来。测验保留在会话中,因此下次加载页面(即单击继续按钮)时,它会退出下一个问题。

问题页面:

<?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 数组以带回下一个问题。由你决定。

于 2012-04-19T21:00:38.257 回答