2012-04-19 55 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