2011-11-08 5 views
1

PHPクイズを3回簡単にします。各質問はそれ自身のページに表示されます。送信ボタンを押すと変数$ numberは1ずつ増加し、その値はユーザーのブラウザに表示される現在のページを決定します。何らかの形でこの変数が正しくインクリメントしていないように見えます。送信ボタンを押すと、ページは変更されません。私は本当にこのプログラムを実行したいと思います。私はこれがあなたのほとんどのための比較的単純なスクリプトだと思います。誰かがこれを実行するのを助けることができれば、それは非常に高く評価されるでしょう。送信ボタンは何も返しません。特定のページに関連付けられた値はインクリメントされません。

<?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'] == 'false'){ 
      $correct++; // this answer should be 'false' 
      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' 
      break; 
      } 
} 
} 

// 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; 
} 


?> 

UPDATE:

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

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


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

// 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; 
$script = $_SERVER['PHP_SELF']; 
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> 
    <form method = "post" action = "$script"> 
    <label><input type="radio" name="answer1" value="true" /> True </label> 
    <label><input type="radio" name="answer1" value="false" /> False </label> 
    <input type="hidden" name="question" value="1" /> 
    <input type = "submit" name = "submit" value = "Check Answer" /> 
    </form> 
</p> 
FIRST; 
} 


if ($number == 1){ 
print <<<SECOND 
<p>2. In what state was the battle of Gettysburg fought?</p> 
<p> 
<form method = "post" action = "$script"> 
<label><input type="radio" name="answer2" value="Texas" /> a) Texas 
</label><br/> 
<label><input type="radio" name="answer2" value="PA" /> b) 
Pennsylvania </label><br/> 
<label><input type="radio" name="answer2" value="Vir" /> c) Virginia 
</label><br/> 
<label><input type="radio" name="answer2" value="West" /> d) West 
Virginia </label> 
<input type="hidden" name="question" value="2" /> 
<input type = "submit" name = "submit" value = "Check Answer" /> 
</form> 
</p> 
SECOND; 
} 
if ($number == 2){ 
print <<<THIRD 
<p>3. The last name of the commander of the Army of North Virginia was __________.</p> 
<p> 
    <form method = "post" action = "$script"> 
    <input type='text' id='answer3' /> 
<input type="hidden" name="question" value="3" /> 
    <input type = "submit" name = "submit" value = "Check Answer" /> 
    </form> 
</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; 
} 


?> 

答えて

0

まず、なぜあなたはHEREDOCを使用しているのか尋ねる必要があります。私は誰かそんなやり方をするのを見たことがない。

とにかく、いくつかのことは、私が気づいた:

  1. あなたのすべての入力フィールドのは、その意図的であればわからない、フォーム上の外に印刷されているが、それではないことが表示されます。実際のフォームの中のものだけがそのフォームと共に提出されます。あなたのフォームはを囲む必要があります あなたの入力フィールドのすべてが送信ボタンに表示されます。
  2. 送信ボタンには名前がありません。たとえば、「submit」という名前を付けない限り、「submit」ボタンの値を取得することはできません。したがって、 'submit'という名前のフィールドがないため、isset($_POST['submit'])は常にfalseを返します。
  3. action = $scriptの文には、HTML構文上の理由から、$scriptの引用が含まれている必要があります。そうしないと、action=/path/to/fileのようなものになります。
  4. @MrTrickはあなたも同様にあなたを助けるはずだが、それはあなたのスクリプトを殺しません。
  5. あなたの答えは、誤ってチェックボックスのタイプを使用していることです。 1つのオプションだけを選択できるようにラジオタイプを使用する必要があります。
+0

幻想的な答え!ちょうど素晴らしい!私はこれらの変更を加えました(MrTricksの提案に加えて)、すべての正しい回答を入れると、3つのうち2つしかないということを除いて、すべての人が動いています。スクリプトが質問の1つの値を正しく取得しない可能性がありますか? – kmimage

+0

@kmimage:あなたの3番目の答えフィールド ''はIDでなく名前が必要です。名前がないので送信されていません。 – animuson

0

は、あなたのプログラムの流れを見てみます。 $_SESSION['correct']が設定されている場合、値は$numberに割り当てられません。

は、多分それはする必要があります:あなたはSTRICTに設定するPHPエラーログを持っている場合

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

、それはあなたが何に設定せずに$numberの値をチェックNoticeエラーを報告している必要があります。

関連する問題