[英]Variable does not increment in PHP script
第一:這不是這個問題的重復。 相同的腳本,但問題不同。
我最初以為上一個問題中的錯誤可以解決此錯誤,但事實並非如此。
我正在通過PHP進行一個簡單的3題測驗。 測驗沒有語法錯誤,但是問題是我的變量$ correct在整個測驗中似乎沒有增加(給出正確答案)。 我放入打印語句以查看它是否更改,但是什么都沒有打印出來。 不知何故,它不能正確地增加變量的值。
而不是輸出:
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;
}
?>
Julio,我當前的代碼(第二次更新):
<?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;
}
?>
您頂部的前幾行...
if(isset($_SESSION["blah"]))
{
$_SESSION["number"] = 0;
$_SESSION["correct"] = 0;
}
這意味着,如果將$ _SESSION ['blah']變量設置為開頭,則$ _SESSION ['correct']僅具有一個值。 這可能是您的問題,因為如果$ _SESSION ['correct']沒有值,則$ session的增量和賦值都不會進一步降低。
通過快速閱讀代碼,您似乎可以通過發布到頁面本身來刷新頁面-這意味着您每次都將$correct
變量重置為0。 如果你想增加$correct
,遞增的SESSION的值,然后讀出會話$correct
值到頁面的$correct
VAR所以它不是每個表單提交重置。
編輯以添加一些示例代碼:
<?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. . .
我會拿出
if(isset($_SESSION["blah"]))
{
$_SESSION["number"] = 0;
$_SESSION["correct"] = 0;
}
完全意味着這將在頁面刷新時重置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.