我在使用PHP数据隐藏表单时遇到了困难。我不能为我的生活弄清楚我做错了什么。
我的代码应该
问题是,它不断重置健康值。
这是我的代码(它的设置使攻击始终成功):
<?php
$health = $_REQUEST["health"];
$attack = rand(10,20);
$defend = rand(1,9);
$damage = rand(1,5);
$health =50;
if ($attack>$defend){
print "<p>Jim hit the robot for $damage.</p>";
$health = $health - $damage;
print "<p>The robot has $health health remaining.</p>";
} else {
print "<p>Jim missed.</p>";
print "<p>The robot has $health health remaining.</p>";
} // end if statement
print <<<HERE
<input type="text"
name="openMonsterHealth"
value="$health">
<input type="hidden"
name="hdnMonsterHealth"
value="$health">
<input type="submit"
value="click to continue">
HERE;
?>
答案 0 :(得分:10)
如果您希望$ health跟随您进入下一页,请使用会话。
基本上,你用
开始你的页面session_start();
if(isset($_SESSION['health'])) {
$health = $_SESSION['health'];
}
else {
//However you normally set health when the user is just starting
}
如果你这样设置,它会加载上一页的健康值:
$_SESSION['health'] = $health;
PHP脚本自动编写和关闭会话,因此除了在会话全局数组中创建变量之外,您不必担心任何其他问题。当您想从上一页检索会话数组中的数据时,不要忘记启动会话。但是,您的用户必须能够接受cookie。
如果您继续使用隐藏字段,播放器可以在将信息发送给您之前更改该信息(此外,它们更难以跟踪)。
但是,您的错误是您在代码的第5行将您的健康状况重置为50,您没有使用正确的变量名来获取请求中的健康状况,并且您没有任何表单标记。
<?php
if(isset($_REQUEST['hdnMonsterHealth']))
$health = $_REQUEST['hdnMonsterHealth'];
else
$health = 50;
$attack = rand(10,20);
$defend = rand(1,9);
$damage = rand(1,5);
if ($attack > $defend) {
print "<p>Jim hit the robot for $damage.</p>";
$health = $health - $damage;
print "<p>The robot has $health health remaining.</p>";
} else {
print "<p>Jim missed.</p>";
print "<p>The robot has $health health remaining.</p>";
} // end if statement
print <<<HERE
<form method="post">
<input type="text"
name="openMonsterHealth"
value="$health">
<input type="hidden"
name="hdnMonsterHealth"
value="$health">
<input type="submit"
value="click to continue">
</form>
HERE;
?>
编辑:很抱歉所有的奇怪之处,这段代码打破了格式化,所以我不得不在<
的代码中手动插入每个<
。但是,此代码现在可以使用。
你还有一个负面健康的错误。不过,我不会为你写游戏。
答案 1 :(得分:1)
抱歉,您还没有提到$ health变量的范围。它属于会话,还是只属于请求的生命周期?
我强烈建议使用会话变量,即:
$_SESSION["health"] = $_SESSION["health"] - $_REQUEST["DAMAGE"];