2011-11-07 5 views
0

最初に:これはthis questionの繰り返しではありません。同じスクリプトですが、別の質問です。PHPスクリプトで変数がインクリメントされない

私は以前、私の以前の質問のエラーがこのエラーを解決したと思っていましたが、それはしませんでした。

私は簡単な3つの質問クイズをPHPで作成しています。クイズは構文エラーなしで実行されますが、問題は私の変数$ correctがクイズ全体で増加していないようです(正解が与えられている)。私はそれが変更されても何も印刷されないかどうかを確認するためにprintステートメントを置きます。どういうわけか、変数の値を正しくインクリメントしていません。代わりに、出力の

You got 2 out of 3 correct. //where 2 is the value of $correct 

それは出力:私は間違って何をやっている

You got correct out of correct. //where the value $correct seems to have no value 

<?php 
ini_set('session.gc_maxlifetime',900); 
//echo ini_get("session.gc_maxlifetime"); 
session_start(); 
if($_SESSION['loggedin'] !== 1) { 
header('Location: login.php'); 
exit; 
} 

if(isset($_SESSION["blah"])) 
{ 
$_SESSION["number"] = 0; 
$_SESSION["correct"] = 0; 
} 

$total_number = 3; 

print <<<TOP 
<html> 
<head> 
<title> History Quiz </title> 
</head> 
<body> 
<h3> History Quiz </h3> 
TOP; 

$number = $_SESSION["number"]; 
$correct = $_SESSION["correct"]; 


if ($number == 0){ 
print <<<FIRST 
<p> You will be given $total_number questions in this quiz. <br /><br/> 
    You will have 15 minutes to complete it. <br /><br/> 
    You cannot go back to change previous answers.<br /><br/> 
    Here is your first question: <br /><br /> 
</p> 
<p>1. Abe Lincoln was born in Illinois.</p> 
<p> 
    <label><input type="radio" name="question1" value="true" /> True </label> 
    <label><input type="radio" name="question1" value="false" /> False </label> 
</p> 
FIRST; 

if (isset($_POST['submit'])) { 

$selected_radio = $_POST['question1']; 

if ($selected_radio == 'false') { 
    $correct++; 
print $correct; 
    $_SESSION["correct"] = $correct; 

} 
} 
} 


if ($number == 1){ 
print <<<SECOND 
<p>2. In what state was the battle of Gettysburg fought?</p> 
<p> 
    <label><input type="checkbox" name="question2" value="Texas" /> a) Texas 
</label><br/> 
    <label><input type="checkbox" name="question2" value="Pennsylvania" /> b) 
Pennsylvania </label><br/> 
    <label><input type="checkbox" name="question2" value="Virginia" /> c) Virginia 
</label><br/> 
    <label><input type="checkbox" name="question2" value="West Virginia" /> d) West 
Virginia </label> 
</p> 
SECOND; 

if (isset($_POST['submit'])) { 

if(isset($_POST['question2']) && 
$_POST['question'] == 'Pennsylvania') 
{ 
    $correct++; 
    $_SESSION["correct"] = $correct; 
} 

} 
} 


if ($number == 2){ 
print <<<THIRD 
<p>3. The last name of the commander of the Army of North Virginia was __________.</p> 
<p> 
    <input type='text' id='question3' /> 
THIRD; 

if (isset($_POST['submit'])) { 

$selected_answer = $_POST['question3']; 

if ($selected_answer == "lee") { 
    $correct++; 
    $_SESSION["correct"] = $correct; 
} 
} 
} 


if ($number >= $total_number) 
{ 
print <<<FINAL_SCORE 
Your final score is $correct correct out of $total_number. <br /><br /> 
Thank you for playing. <br /><br /> 
FINAL_SCORE; 
session_destroy(); 
} 
else 
{ 
$number++; 
$_SESSION["number"] = $number; 
$script = $_SERVER['PHP_SELF']; 
print <<<FORM 
<form method = "post" action = $script> 
<input type = "submit" value = "Check Answer" /> 
</form> 
FORM; 
} 

?> 

フリオ、私の現在のコード(第二更新):

<?php 
ini_set('session.gc_maxlifetime',900); 
session_start(); 
if($_SESSION['loggedin'] !== 1) { 
header('Location: login.php'); 
exit; 
} 

if(isset($_SESSION["correct"])){ 
$correct = $_SESSION["correct"]; 
} else { 
$number = 0; 
$correct = 0; 
} 

// check if which question was submitted 
if (isset($_POST['submit'])) { 
// set $number = the question that was submitted 
$number = $_POST['question']; 
switch ($_POST['question']){ 
    case 1: 
     if ($_POST['answer']) $correct++; // this answer should be 'true' 
     break; 
    case 2: 
     if ($_POST['answer'] == 2) $correct++; // this answer should be 'PA' 
     break; 
    case 3: 
    if ($_POST['answer'] == "lee") $correct++; //this answer should be 'lee' 
} 
} 

// set the session correct var to our current tally 
$_SESSION['correct'] = $correct; 



$total_number = 3; 

print <<<TOP 
<html> 
<head> 
<title> History Quiz </title> 
</head> 
<body> 
<h3> History Quiz </h3> 
TOP; 

if ($number == 0){ 
print <<<FIRST 
<p> You will be given $total_number questions in this quiz. <br /><br/> 
    You will have 15 minutes to complete it. <br /><br/> 
    You cannot go back to change previous answers.<br /><br/> 
    Here is your first question: <br /><br /> 
</p> 
<p>1. Abe Lincoln was born in Illinois.</p> 
<p> 
    <label><input type="radio" name="answer" value="true" /> True </label> 
    <label><input type="radio" name="answer" value="false" /> False </label> 
    <input type="hidden" name="question" value="1" /> 
</p> 
FIRST; 
} 


if ($number == 1){ 
print <<<SECOND 
<p>2. In what state was the battle of Gettysburg fought?</p> 
<p> 
<label><input type="checkbox" name="answer" value="1" /> a) Texas 
</label><br/> 
<label><input type="checkbox" name="answer" value="2" /> b) 
Pennsylvania </label><br/> 
<label><input type="checkbox" name="answer" value="3" /> c) Virginia 
</label><br/> 
<label><input type="checkbox" name="answer" value="4" /> d) West 
Virginia </label> 
<input type="hidden" name="question" value="2" /> 
</p> 
SECOND; 
} 
if ($number == 2){ 
print <<<THIRD 
<p>3. The last name of the commander of the Army of North Virginia was __________.</p> 
<p> 
    <input type='text' id='answer' /> 
<input type="hidden" name="question" value="3" /> 
</p> 
THIRD; 
} 

if ($number >= $total_number) 
{ 
print <<<FINAL_SCORE 
Your final score is $correct correct out of $total_number. <br /><br /> 
Thank you for playing. <br /><br /> 
FINAL_SCORE; 
session_destroy(); 
} 
else { 
$number++; 
$_SESSION['number'] = $number; 
$script = $_SERVER['PHP_SELF']; 
print <<<FORM 
<form method = "post" action = $script> 
<input type = "submit" value = "Check Answer" /> 
</form> 
FORM; 
} 


?> 
+0

最終スコアを印刷するときに '$ _SESSION [" correct "]'を使用するとどうなりますか? –

+0

私はPHPに慣れていますので、私を許しても、私のラインはこのように見えますか?あなたの最終得点は$ total_numberの$ _SESSION ["correct"]です。 <もしそうなら、構文エラーが出ます。 – kmimage

答えて

0

コードをすばやく読んで、自分自身に投稿してページをリフレッシュしているようです。つまり、毎回$correct変数を0にリセットしています。 $correctをインクリメントしたい場合は、SESSIONの値をインクリメントし、$correctの値をページの$correctに読み込み、各フォームの送信時にリセットされないようにします。これは、ページのリフレッシュにリセットされますを意味しますよう

<?php 

session_start(); 
if($_SESSION['loggedin'] !== 1) { 
header('Location: login.php'); 
exit; 
} 

if(isset($_SESSION["correct"])){ 
    $correct = $_SESSION["correct"]; 
} else { 
    $number  = 0; 
    $correct = 0; 
} 

// check if which question was submitted 
if (isset($_POST['submit'])) { 
    // set $number = the question that was submitted 
    $number = $_POST['question']; 
    switch ($_POST['question']){ //<-----replace this line 
     case 1: 
      if ($_POST['answer']) $correct++; // this answer should be 'true' 
      break; 
     case 2: 
      if ($_POST['answer'] == 2) $correct++; // this answer should be 'PA' 
      break; 
     //etc. 
    } 
} 

// set the session correct var to our current tally 
$_SESSION['correct'] = $correct; 



$total_number = 3; 

print <<<TOP 
<html> 
<head> 
<title> History Quiz </title> 
</head> 
<body> 
<h3> History Quiz </h3> 
TOP; 

if ($number == 0){ 
    print <<<FIRST 
    <p> You will be given $total_number questions in this quiz. <br /><br/> 
     You will have 15 minutes to complete it. <br /><br/> 
     You cannot go back to change previous answers.<br /><br/> 
     Here is your first question: <br /><br /> 
    </p> 
    <p>1. Abe Lincoln was born in Illinois.</p> 
    <p> 
     <label><input type="radio" name="answer" value="true" /> True </label> 
     <label><input type="radio" name="answer" value="false" /> False </label> 
     <input type="hidden" name="question" value="1" /> 
    </p> 
    FIRST; 
} 


if ($number == 1){ 
print <<<SECOND 
<p>2. In what state was the battle of Gettysburg fought?</p> 
<p> 
    <label><input type="checkbox" name="answer" value="1" /> a) Texas 
</label><br/> 
    <label><input type="checkbox" name="answer" value="2" /> b) 
Pennsylvania </label><br/> 
    <label><input type="checkbox" name="answer" value="3" /> c) Virginia 
</label><br/> 
    <label><input type="checkbox" name="answer" value="4" /> d) West 
Virginia </label> 
<input type="hidden" name="question" value="2" /> 
</p> 
SECOND; 
etc. . . 
+0

答えが正しければ、私はこれを持っているはずです:$ _SESSION ["correct"] ++; ?私が最終スコアを印刷するときには、これを行うべきです:$ _SESSION ["correct"] = $ correct ;.これはあなたが意味することですか?私は何かを削除すべきですか? – kmimage

+0

おそらくもっと '$ session ++;'と '$ _SESSION ['correct'] = $ session'のようになります。次に、ファイルの先頭で、$セッションの初期値を設定すると、 '$ session = isset($ _ SESSIONS ['correct'])のようなことができますか? $ _SESSION ['correct']:0; ' – julio

+0

上記の私の質問を参照してください - 私は最後にものを追加しました。そのコードはあなたが意味するものですか? – kmimage

0

上部にあなたの最初の数行...

if(isset($_SESSION["blah"])) 
{ 
    $_SESSION["number"] = 0; 
    $_SESSION["correct"] = 0; 
} 

これは、$ _SESSION [ '正しい' という意味]は$ _SESSION ['blah']変数が先頭に設定されている場合にのみ値を持ちます。 $ _SESSION ['correct']に値がないと、$ sessionへのインクリメントと割り当てはそれ以上行われないため、これはあなたの問題です。

+0

意味があります。これをどのように変更する必要がありますか? – kmimage

0

私は

if(isset($_SESSION["blah"])) 
{ 
    $_SESSION["number"] = 0; 
    $_SESSION["correct"] = 0; 
} 

完全に取り出します:

EDITは、いくつかのサンプルコードを追加します。

関連する問題