0

我可以使用 PHP 并想了解更多关于它的信息!我现在正在模拟 2 个角色之间的某种战斗。问题是,我只能打 1 轮,所以当我点击“战斗”按钮时,它只能打 1 轮。当我再次单击“战斗”时,我似乎无法找出为什么生命值没有改变。这是代码:

<body>
<?php 
$Hitpoints1 = 30;
$Hitpoints2 = 30;

?>
<form name="frmFight" form action="" method="post">
<table width="700" border="0" align="left" cellpadding="0" cellspacing="0">
  <tr>
    <td align="center">Character 1</td>
    <td align="center">Character 2</td>
  </tr>
  <tr>
    <td align="center"><?php 
    if (isset($_POST['btnFight'])) {
    $Damage1 += mt_rand(2,9); }
    $Total1 = $Hitpoints1 - $Damage1;
    echo $Total1; ?></td>
    <td align="center"><?php 
    if (isset($_POST['btnFight'])) {
    $Damage2 += mt_rand(2,9); }
    $Total2 = $Hitpoints2 - $Damage2;
    echo $Total2; ?></td>
  </tr>
  <tr>
    <td align="center">&nbsp;</td>
    <td align="center">&nbsp;</td>
  </tr>
</table>
<p><input name="btnFight" type="submit" value="Submit" /></p>

</form>
</body>
4

6 回答 6

2

尝试将您的变量放在用户会话中:

<?php
session_start(); 
if(!isset($_SESSION['hitpoints_1'])) {
    $_SESSION['hitpoints_1'] = 30;
}
if(!isset($_SESSION['hitpoints_2'])) {
    $_SESSION['hitpoints_2'] = 30;
}
$Hitpoints1 = $_SESSION['hitpoints_1'];
$Hitpoints2 = $_SESSION['hitpoints_2'];

?>

但是您应该考虑更持久的存储,例如 SQL 或文件。

于 2012-07-20T19:38:02.787 回答
2

您似乎错过了 PHP 工作原理的一些要点。您的脚本每次被请求时都会从头开始执行,并且每次按下按钮时都会被请求。这表示; 每次按下按钮时,他们的生命值都会设置为 30,然后减去伤害。

要在每个请求之间保存变量,您必须将其保存在服务器上(查看会话)或以 HTML 可以作为请求的一部分发回的方式保存(将其存储在 HTML 中的隐藏字段中)。

于 2012-07-20T19:39:19.423 回答
0

提交表单后,您并没有“保存”生命值的值。当页面重新加载时,您需要查看 POST 数据并编辑 和 的$Hitpoints1$Hitpoints2

因此,当您提交表单时,您还需要为新的命中点值发送更多 POST 数据。所以有

<input type="hidden" name="hitpoint1" value="$Total1" />
<input type="hidden" name="hitpoint2" value="$Total2" />

然后在页面加载时查找这些变量:

if (isset($_POST['hitpoint1']) {
    $Hitpoints1 = $_POST['hitpoint1']
}
if (isset($_POST['hitpoint2']) {
    $Hitpoints1 = $_POST['hitpoint2']
}
于 2012-07-20T19:38:38.143 回答
0

提交页面会重置数据,因此 $hitpoints 再次为 30,它会减去您按下产生的随机数。

使用会话。

于 2012-07-20T19:39:06.577 回答
0

每次您提交表单(例如通过单击按钮)时,都会创建一个新的 PHP 请求。来自一个请求的数据不会自动继续到下一个请求。

有两种方法可以解决这个问题

  1. 使用会话在请求之间存储数据。这种方法更安全,因为内部数据不提供给前端(可以更改)。这可能是你现在想要走的路。
  2. 将您想要继续的数据放入表单中,以便在您提交表单时将其发送回脚本进行处理。这种方法不太安全(因为用户可以编辑回发的数据)但更具可扩展性(因为服务器没有状态)。
于 2012-07-20T19:40:34.067 回答
0

每次加载页面时,您都会在第 3 行和第 4 行重置生命值。您应该在输入框中设置总计,然后将参数传回,而不是回显总计:

echo $Total1;

变成

echo '<input type="text" value=".'$Total1'." name="hitpoints1" title="Total Hitpoints for 1">;

然后,读取文件开头的 $_POST 变量:

if(isset($_POST['hitpoints1']){
  $Hitpoints1=$_POST('hitpoints1');
} else {
   $Hitpoints1=30;
}

对 hitponts2 执行相同的操作。

于 2012-07-20T19:42:19.463 回答