2016-03-28 12 views
0

Stack Overflowメンバーの助けと貴重な洞察のおかげで、私は自分のクイズプロジェクトを終了することに非常に近いです。しかし、私はプロジェクトの仕上げの面でもう少し質問があります。私が始める前に、私は自分のクイズプロジェクトの簡単な背景を説明したいと思います。フォームデータを保存してフォームデータを使用して適切なURLにリダイレクト

クイズは10個の質問で構成されています。それぞれの質問は、ラジオボタンと情報を提出する回答ボタンを使用する多肢選択肢またはY/Nのいずれかです。このコードには、JavaScriptとPHPの両方が組み込まれていますが、後でAjaxが使用されることもあります。これまでにできたことは、ユーザーが最初の質問に答えるために最初のページを入力し、ラジオボタンを選択して回答ボタンを押すと、フォームを送信し、それがあったかどうかに応じて適切なテキストを印刷することです正しいか正しくない。この部分は、今のところ少なくとも私のためにはうまくいく。

うまくいかないものは2つあります。インクリメントしたり、ページのインクリメントされた値を表示することもできます(最終的な反復では表示されません)が、ページがリフレッシュされると、最初のページで同じプロセスを再度実行し、全体の正しい変数。これは、ユーザーとして、最初の質問を残すことなく、まったく正しい変数を増やすことができることを意味します。

これは、ここに私のコードです:

foreach ($correctAns as $key => $answer) 
{ 
    if (!empty($_POST[$key])) 
    { 
     if ($_POST[$key] == $answer) 
     { 
      print $correct[$index]; 
      $_SESSION["totalCorrect"]++; 
      print $_SESSION["totalCorrect"]; 
     } 
     else if($_POST[$key] != $answer) 
     { 
      print $incorrect[$index]; 
      print "0"; 
     } 
    } 
    $index++; 
}; 

目標は、各ページから合計正しい変数をインクリメントすることであり、2つのページのいずれかにそれらを取る、正しかった何に基づきます。たとえば、合計の正しい変数が7未満だった場合、再取得ページにリダイレクトされます。それが7以上の場合、成功ページに移動します。ここで

は、フォーム送信の例です:

<form> 
    <fieldset> 
     <legend>Question 1</legend> 
      <input type="radio" name="answer1" value="a" id="1a"><label for="1a" > A.</label> 
      <br> 
      <input type="radio" name="answer1" value="b" id="1b"><label for="1b"> B.</label> 
      <br> 
      <input type="radio" name="answer1" value="c" id="1c"><label for="1c"> C.</label> 
      <br> 
      <input type="radio" name="answer1" value="d" id="1d"><label for="1d"> D.</label> 
    </fieldset> 
      <input type="button" id="answer" class="" value="ANSWER"> 
</form> 

私はロックダウンしたい主なものは、ユーザがラジオボタンを選択して解答]ボタンをクリックしたとき、その値が上の格納されていることです私のPHPファイル。ユーザーがこれまで3つの正解を持っている場合は、3つの正解を保持する必要があります。ユーザーが質問10の[送信]ボタンをクリックした後に10の質問すべてに答えたときに、すべてが評価されます。

セッションのフォームデータを破壊し、別のPHPファイルを使用してリダイレクトする方法を調べましたが、まだいくつかの分野で混乱しています。たとえば、ユーザーが質問4になっていて、何らかの理由でページを更新することを決定した場合、質問1-3のフォームデータも破棄されますか?

私が提供したり明確にすることができるものがあるかどうかを教えてください。

答えて

0

あなたはセッションを使用していますが、セッション変数を使用して到達した質問を保存し、別のセッションで正解のカウンタを保存しています。

各ページのヘッダーで、どの質問にユーザーが到達したかをPHPスクリプトで確認します。

<?php 
session_start(); 
if(!$_SESSION['question_id']){ 
$_SESSION['question_id'] = 1; 
$_SESSION['correct_answers'] = 0; 
} 

$question_id = $_SESSION['question_id']; 

// select question where question_id = $question_id 
// select all choices and correct answer ($correct_answer) 
// print the question with the choices 

if(isset $_post['submit']){ 
if($correct_answer == $_POST['choice']){ 
$_SESSION['correct_answers']+=1; 
$_SESSION['question_id']+=1; 
} 
} 
+0

多分このような何か:$ _SESSION ['answer1'] == $ ans1。保存されたフォームのIDですか? – Wolfrum

+0

保存されたフォームのIDは、最初の質問として1で始まる各サブミットで増分され、ユーザーが質問を送信して答えをチェックしたときに、セッションに1を追加できます。 –

+0

編集された回答を参照してください –

関連する問題