我正在练习使用PHP创建一个简单的测验网页。我想一次显示一个问题(而不是一次显示)。我使用了一个计数器变量,它将跟踪当前的问题编号。将显示与计数器变量中保存的值相对应的问题。
这是我迄今为止所做的。
<?php
session_start();
?>
<html>
<head>
<title>game</title>
<link rel="stylesheet" type="text/css" href="stylesheet.css">
<link rel="shortcut icon" href="Untitled2.ico">
</head>
<body>
<div id="middle">
<div id="quiz">
<form id="quiz2" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<fieldset>
<?php
if (isset($_SESSION['count'])){
$_SESSION['count'] = 1;
echo $_SESSION['count'];
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
++$_SESSION['count'];
echo $_SESSION['count'];
}
?>
<?php if ($_SESSION['count']==1) : ?>
<p>Ok, we will start with a nice easy question first.</p>
<p>What is your favourite colour?</p>
<input type="radio" name="Q1" value="red" required="required">
Red
<br>
<input type="radio" name="Q1" value="black" required="required">
Black
<br>
<input type="radio" name="Q1" value="green" required="required">
Green
<br>
<input type="radio" name="Q1" value="orange" required="required">
Orange
<br>
<input type="radio" name="Q1" value="yellow" required="required">
Yellow
<br>
<input type="radio" name="Q1" value="blue" required="required">
Blue
<br>
<br>
<input type="submit" name="submit" value="Next">
<?php endif; ?>
<?php if ($_SESSION['count']==2) : ?>
<p>Ah...I see.</p>
<p>Now try this one.</p>
<p>What trait do you admire most in a person?</p>
<input type="radio" name="Q2" value="intelligence" required="required">
Intelligence
<br>
<input type="radio" name="Q2" value="ambition" required="required">
Ambition
<br>
<input type="radio" name="Q2" value="kindness" required="required">
Kindness
<br>
<input type="radio" name="Q2" value="determination" required="required">
Determination
<br>
<input type="radio" name="Q2" value="self-preservation" required="required">
Self-preservation
<br>
<input type="radio" name="Q2" value="hard-working" required="required">
Hard-working
<br>
<input type="radio" name="Q2" value="creativity" required="required">
Creativity
<br>
<br>
<input type="submit" name="submit" value="Next">
<?php endif; ?>
</fieldset>
</form>
</div>
</div>
</body>
</html>
因此,每个html(显示问题)的块都是隐藏的或显示的,具体取决于计数器变量。
这可以正常工作,直到计数器变量达到2,此时它停止递增,问题2仍然在页面上。
我认为使用会话变量会阻止我显然做错了。
答案 0 :(得分:1)
您始终将计数器设置为2
在此行中,检查是否设置了计数器变量。如果是,则将其设置为1
if(isset($_SESSION['count'])){
$_SESSION['count'] = 1;
echo $_SESSION['count'];
}
然后在获得POST
时增加它:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
++$_SESSION['count'];
echo $_SESSION['count'];
}
我们知道1 + 1 = 2
。
我认为你想在没有设置时启动计数器,所以改变
if(!isset($_SESSION['count'])){
$_SESSION['count'] = 1;
}
echo $_SESSION['count'];
然后在POST
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$_SESSION['count']++;
}
echo $_SESSION['count'];
答案 1 :(得分:0)
你搞砸了这段代码:
<?php
if (isset($_SESSION['count'])){
$_SESSION['count'] = 1;
echo $_SESSION['count'];
}
上述代码表示如果我们有会话变量的值,请将其覆盖为1
。
这应该是:
<?php
if (! isset($_SESSION['count'])){
$_SESSION['count'] = 1;
echo $_SESSION['count'];
}
此代码检查是否存在会话变量的值。
如果没有,请将其设置为1
。
如果是的话,什么也不做。
答案 2 :(得分:0)
这部分
if (isset($_SESSION['count'])){
$_SESSION['count'] = 1;
echo $_SESSION['count'];
}
每次重新加载页面时,使计数器1成为可能。您应该使用!isset(在isset之前这样!),以便在计数器尚未设置时将count设置为1。
答案 3 :(得分:0)
错误在以下代码中:
BB
设置或不设置isset检查变量。如果它被设置,那么它评估为真,如果是部分则可以使用。
所以将其更改为以下内容:
<?php
if (isset($_SESSION['count'])){
$_SESSION['count'] = 1;
echo $_SESSION['count'];
}
empty检查变量是否受到限制,并检查该值是否为0,'0',''并为空。
如果您因使用isset或empty而感到困惑,请考虑以下事项:
isset仅检查是否声明了varible。 如果varible是decalred并且值为0,则''isset计算为true,如果是part,则为excutes。
当为空时检查其声明和值。 如果varible的值为0,那么它将评估为真并且如果是部分则为excutes。 如果varible未声明,则返回true。