我有这个页面用于将我的答案作为表单提交到另一个PHP文件名processGame.php
String command = input.nextLine();
在提交时,我转到此processGame.php,我有这样的代码:
<?php
$factor1 = rand(2, 12);
$factor2 = rand(2, 12);
$answer = $factor1 * $factor2;
$score = 0;
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div id="imageContainer1">
<?php echo $factor1; ?>
</div>
<div id="imageContainer2">
<?php echo $factor2; ?>
</div>
<div id="form">
<form method="post" action="processGame.php">
<textarea type="text" name="userInput" maxlength="3" style="width: 150px; height: 95px; position: absolute; top: 250px; left: 20px; font-size: 80px;"></textarea>
<input type="hidden" name="answer" value="<?php echo $answer; ?>">
<input type="submit" name="enter" value="Enter" style="width: 120px; height: 100px; font-size: 40px; position: relative; top: 250px; left: 180px;">
</form>
</div>
</body>
</html>
然而,分数无法合并,并且在循环5轮后不会打印出分数。请帮帮我! :(
答案 0 :(得分:0)
您没有将$score
发送到其他页面。在重定向时发送分数:
header("location:game.php?score=$score");
您可以使用game.php
$score=$_GET['score'];
中获得此分数
答案 1 :(得分:0)
您的代码存在一些问题。让我们快速浏览一下:
首先,这是您的代码将执行的操作:
game.php
)processGame.php
并在那里:
input
是否等于answer
$score
增加1和game.php
$score
只能在$processGame.php
内访问。header()
后,将留下processGame.php
,不再执行任何代码。这就是为什么你永远不会比第一次迭代更进一步。game.php
表单时,processGame.php
都会被处理,就像之前从未打开过一样。所以你的循环总是从0
开始(顺便说一下也会运行6次! - 使用<5
代替<=5
)。有一个很多可供使用,因为我希望解释可理解。我可以而且不会在这里提供完整的代码,因为这基本上意味着重写您提供的所有内容。但我建议阅读以下主题并重新思考您的代码:
header()
function 一些建议:
GET
参数将分数传回给用户。他们可以很容易地被操纵(他们只是欺骗自己,不管他们吗?)。无论如何你重写游戏,这里有一个最后的提示:不将你的答案存储在<input type="hidden">
字段中。玩家可以通过查看源代码轻松阅读答案。相反,将输入因子发送到服务器上的处理代码,然后让他完成工作。 :)
根据您的初始代码,这是一个非常基本,可行的解决方案。请记住,这不是不最终解决方案的样子,但它旨在为您提供一个起点。 确保您完全理解,否则很快就会遇到麻烦!
game.php
:
<?php
$factor1 = rand(2, 12);
$factor2 = rand(2, 12);
$score = isset($_GET["s"]) ? $_GET["s"] : 0;
$round = isset($_GET["r"]) ? $_GET["r"] : 0;
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Game</title>
</head>
<body>
<div id="stats">
<p>Your current score is: <?php echo $score; ?></p>
<?php if( isset($_GET["l"]) ): ?>
<p>Wrong answer! The correct solution would have been: <?php echo $_GET["l"]; ?>
<?php endif; ?>
<?php if( 5 == $round ): ?>
<p>Game over! You scored <?php echo $score; ?> points.
<?php endif; ?>
</div>
<div id="form">
<form method="post" action="processGame.php">
<?php echo "$factor1 * $factor2 ="; ?>
<input type="text" name="userInput" maxlength="3" />
<input type="submit" name="solve" value="Solve">
<!-- Meta information, used to compute game progress: -->
<input type="hidden" name="f1" value="<?php echo $factor1; ?>">
<input type="hidden" name="f2" value="<?php echo $factor2; ?>">
<input type="hidden" name="s" value="<?php echo $score; ?>">
<input type="hidden" name="r" value="<?php echo $round; ?>">
</form>
</div>
</body>
</html>
processGame.php
:
<?php
//retrieve postet information
$userInput = isset($_POST["userInput"]) ? intval($_POST["userInput"]) : 0;
$factor1 = isset($_POST["f1"]) ? intval($_POST["f1"]) : 0;
$factor2 = isset($_POST["f2"]) ? intval($_POST["f2"]) : 0;
$score = isset($_POST["s"]) ? intval($_POST["s"]) : 0;
$round = isset($_POST["r"]) ? intval($_POST["r"]) : 0;
// calculate correct result
$solution = $factor1 * $factor2;
//this is the url that will be returned to. Notice the use of GET parameters
$url = "game.php?r=".($round+1);
//check with user input
if( $userInput == $solution)
{
$score += 1;
$url.="&s=$score";
}
else
{
$url.="&s=$score&l=$solution";
}
//return to interface
header("Location:$url");