在PHP中单击按钮时不更新或保存值?
状态: 学徒 我的PHP知识: 初级水平 我试图用PHP代码实现的目标: 当用户单击提交按钮时,更新健康栏输入在PHP中单击按钮时不更新或保存值?,php,Php,状态: 学徒 我的PHP知识: 初级水平 我试图用PHP代码实现的目标: 当用户单击提交按钮时,更新健康栏输入 <form> <input type="submit" value="Attack"> </form> 如果条件为真,post已经完成,那么我想从变量health中减去25,它等于另一个名为input的变量 问题: <?php session_start(); $health =
<form>
<input type="submit" value="Attack">
</form>
如果条件为真,post已经完成,那么我想从变量health中减去25,它等于另一个名为input的变量
问题:
<?php
session_start();
$health = (isset($_SESSION['health']) ? $_SESSION['health'] : 100);
if (isset($_REQUEST['submit'])) {
$health = $health - 25;
$_SESSION['health'] = $health;
}
$input = "";
$bar = '<div>' . $health . $input . '%' . '</div>' . '<div>' . 'Stamina' . '</div>';
echo $bar;
?>
<form action="attack.php" method="post">
<input type="submit" name="submit" value="Attack">
</form>
我无法理解为什么运行状况没有更新,以及如何保存更新的值,即使用户每次单击“攻击”时刷新并用更新的运行状况减去25
我所尝试的:
除了做一些关于Session_start()的PHP研究外,我不知道如何在这个上下文中使用它。我甚至不能完全确定为什么我的条件是错误的。我没有收到任何错误消息,但当我删除if语句并回显my bar变量时,它也不起作用,因为我根本没有得到任何数字,这当然让我怀疑我的数学不起作用
<?php
$health = 100;
$input = "";
$bar = '<div>' . $health . $input . '%' . '</div>' . '<div>' . 'Stamina' . '</div>';
echo $bar;
if (isset($_POST['submit'])) {
$health - 25 == $input;
echo $bar;
}
?>
问题:
为什么我的健康/输入值没有更新?如何在下次攻击时保存会话并从新变量中删除?定义您的表单,如下所示:
<form method="POST">
这可能会奏效。您可能需要一个用于当前运行状况的隐藏输入字段。定义表单如下:
<form method="POST">
这可能会奏效。您可能需要一个用于当前运行状况的隐藏输入字段。首先,如果省略,表单默认为GET方法 因此,您需要在表单标记中指定它
method=“post”
- 添加
name=“submit”
$health-25==$input代码>这没有任何意义,我不知道你想在这里做什么
正如Carrot先生在另一个回答中所说的,您希望使用$health=$health-25代码>
我会让你们看一下给出的答案,但这给了你们一个很好的指示
使用错误报告会发出通知
添加到文件的顶部,这将有助于查找错误
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
首先,如果省略,表单默认为GET方法
因此,您需要在表单标记中指定它
method=“post”
然后您的条件语句将失败,因为提交输入没有name属性
- 添加
name=“submit”
然后这个$health-25==$input代码>这没有任何意义,我不知道你想在这里做什么
正如Carrot先生在另一个回答中所说的,您希望使用$health=$health-25代码>
我会让你们看一下给出的答案,但这给了你们一个很好的指示
使用错误报告会发出通知
添加到文件的顶部,这将有助于查找错误
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
您的PHP是无状态的,因此它没有关于健康状况的记录-每次只需将其重置为100即可
您需要使用会话,或者每次只需返回健康值:
<?php
$health = (isset($_REQUEST['health']) ? (int) $_REQUEST['health'] : 100);
if (isset($_REQUEST['submit'])) {
$health = $health - 25;
}
$input = "";
$bar = '<div>' . $health . $input . '%' . '</div>' . '<div>' . 'Stamina' . '</div>';
echo $bar;
?>
<form action="attack.php" method="post">
<input type="submit" name="submit" value="Attack">
<input type="hidden" name="health" value="<?php echo $health; ?>">
</form>
最后一点意见是,使用会话方法,用户不能篡改自己的健康分数。然而,使用隐藏输入法,用户可能会更改字段的值,并篡改他们的健康分数(如果他们有技术诀窍)。您的PHP是无状态的,因此它没有健康记录-每次只需重置为100即可
您需要使用会话,或者每次只需返回健康值:
<?php
$health = (isset($_REQUEST['health']) ? (int) $_REQUEST['health'] : 100);
if (isset($_REQUEST['submit'])) {
$health = $health - 25;
}
$input = "";
$bar = '<div>' . $health . $input . '%' . '</div>' . '<div>' . 'Stamina' . '</div>';
echo $bar;
?>
<form action="attack.php" method="post">
<input type="submit" name="submit" value="Attack">
<input type="hidden" name="health" value="<?php echo $health; ?>">
</form>
最后一点意见是,使用会话方法,用户不能篡改自己的健康分数。而使用隐藏输入法,用户可能会更改字段的值,并篡改他们的健康分数(如果他们有技术诀窍)。将表格更改为下表-
<form action='' method='POST'>
<input type="submit" name='submit1' value="Attack">
</form>
Then you can do -
if (isset($_POST['submit1']))
{
echo "button was pressed";
/// do other stuff.....
}
那你就可以了-
如果(isset($_POST['submit1']))
{
echo“按钮被按下”;
///做其他事情。。。。。
}
将表格更改为以下表格-
<form action='' method='POST'>
<input type="submit" name='submit1' value="Attack">
</form>
Then you can do -
if (isset($_POST['submit1']))
{
echo "button was pressed";
/// do other stuff.....
}
那你就可以了-
如果(isset($_POST['submit1']))
{
echo“按钮被按下”;
///做其他事情。。。。。
}
submit按钮在post请求中不传递其值,您需要不同的输入类型来传递value@atmd你是对的。有没有办法检查它是否被点击?据我所知,表单默认为GET方法提交按钮在post请求中传递其值,如果您给它们一个名称
-但是如果我错了,您可以使用一个名为“submit”且值为1的隐藏输入,如下所示:提交按钮在post请求中不传递其值,您需要不同的输入类型来传递value@atmd你是对的。有没有办法检查它是否被点击了?据我所知,表单默认为GET方法提交按钮在post请求中传递它们的值,如果你给它们一个名称
-但是如果我错了,你可以使用一个名为“submit”且值为1的隐藏输入,如下所示:我将向上投票。TBH,我真的不知道OP试图用$health-25==$input做什么代码>作为比较?哈哈,就像我在我的书中说的,我在你的书中提到过。我可能会删除我的答案。所以我不需要会话或cookies来完成这样的任务?把数据放在我的数据库中更好吗?如果你除了健康之外还有很多数据,或者如果健康需要转到其他脚本/页面/视图,那么我会考虑使用会话。但如果我们说的是一对一的单变量