2012-04-19 18 views
2

以前にテキストファイルを作成し、それを多次元配列に変換してクイズの質問として表示しました。オンラインクイズで一度に1つのデータのみを表示する方法

注:私はイメージを挿入できません。したがって、私はできる限り記述的にしようとします。

ユーザーが自分のクイズをクリックするたびに、一度に1つの質問のみを表示しようとしています。

これまでのコードです。 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()を使用して1つの質問のみを表示するにはどうすればよいですか?

+0

$ _SESSION配列のvar_dumpを教えてもらえますか? –

+0

($ q、$ a、$ answer、$ data) – user1344705

+0

これは私が尋ねたものではありません.. var_dump($ _ SESSION ["questions_array"]);質問ページに結果を投稿してください。 –

答えて

2

私はちょっとあなたの尋ねることを得る、Iveは基本的な構造を記入した。これはすべて1ページで行うことができます。

EDIT:イムとして

なナイスガイHERESに完全なスクリプト、私の前の提案を使用して、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

+0

それは自分自身のアイデアを投稿します、注意: '<?= basename($ _ SERVER [" SCRIPT_FILENAME "]);?>' –

+0

ねえ、ただし空白のページが表示されます。私は今、これを引き起こした可能性のあるものを見つけようとしています。あなたは何か考えてもらえますか? – user1344705

1

オーケーあなたの問題を解決するには、outterアレイ上の別の配列のシフトを行うので、 。これで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)No B.1)それ以上の質問は、私たちのクイズは終わった。

注:いくつかの欠点があります。その人がページをリフレッシュすると、彼らは新しい質問を受け取り、他の人は未回答になります。代わりに、回答ページが読み込まれるたびに更新される$カウンタ変数を渡すこともできます。その後、そのカウンタを$ _SESSION配列に渡して、次の質問を返します。それはあなた次第です。

+0

そうです。それが一緒に押されていないとき、より良く見えました。 –

+0

ご協力いただきありがとうございます!このコードに新しいページが必要なのでしょうか、これを私の質問ページに追加することができますか? - 私の質問ページに追加しようとしましたが、まだページにすべての質問が表示されていました:( – user1344705

+0

あなたが持っていたものを置き換えましたか?私はあなたの質問にリストしたものの代わりにこれを使用します。 –

関連する問題