挣扎着隐藏的表单领域基础知识(PHP)

时间:2009-04-11 05:44:50

标签: php forms

我在使用PHP数据隐藏表单时遇到了困难。我不能为我的生活弄清楚我做错了什么。

我的代码应该

  1. 检查攻击是否成功;
  2. 如果成功,减去健康造成的伤害;
  3. 重写$ health变量。
  4. 使用新的$ health值进行下一轮。
  5. 问题是,它不断重置健康值。

    这是我的代码(它的设置使攻击始终成功):

    <?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;
    ?>
    

2 个答案:

答案 0 :(得分:10)

如果您希望$ health跟随您进入下一页,请使用会话。

PHP Manual on Sessions

基本上,你用

开始你的页面
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;
?>

编辑:很抱歉所有的奇怪之处,这段代码打破了格式化,所以我不得不在<的代码中手动插入每个&lt;。但是,此代码现在可以使用。

你还有一个负面健康的错误。不过,我不会为你写游戏。

答案 1 :(得分:1)

抱歉,您还没有提到$ he​​alth变量的范围。它属于会话,还是只属于请求的生命周期?

我强烈建议使用会话变量,即:

$_SESSION["health"] = $_SESSION["health"] - $_REQUEST["DAMAGE"];