Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中单击按钮时不更新或保存值?_Php - Fatal编程技术网

在PHP中单击按钮时不更新或保存值?

在PHP中单击按钮时不更新或保存值?,php,Php,状态: 学徒 我的PHP知识: 初级水平 我试图用PHP代码实现的目标: 当用户单击提交按钮时,更新健康栏输入 <form> <input type="submit" value="Attack"> </form> 如果条件为真,post已经完成,那么我想从变量health中减去25,它等于另一个名为input的变量 问题: <?php session_start(); $health =

状态

学徒

我的PHP知识

初级水平

我试图用PHP代码实现的目标

当用户单击提交按钮时,更新健康栏输入

<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属性

  • 添加
    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来完成这样的任务?把数据放在我的数据库中更好吗?如果你除了健康之外还有很多数据,或者如果健康需要转到其他脚本/页面/视图,那么我会考虑使用会话。但如果我们说的是一对一的单变量