PHP在提交后保留打印/回显的值


PHP keep printed/echoed values after submitting

这是我目前拥有的代码的简化版本:

<!DOCTYPE html>
<html>
    <head>
    </head>
    <body>
        <form name="form" action="" method="post">
            <input name="button1" type="submit" value="Submit">
        </form>
        <hr>
    </body>
</html>
<?php
    if (isset($_POST['button1'])){ 
        echo 'Test';
    }
?>

,当我点击一次按钮时,此代码输出Test,但当我再次点击它时,它清除第一个回声,并重新打印它,因此输出仍将是一个Test。在PHP中是否有任何方法可以阻止它清除第一个echo,因此输出将成为TestTest ?

web是无状态的。每次单击提交时,您都会启动一个来自全新用户的新请求(就服务器而言)。web服务器不会记住(或者不关心)您之前刚刚发出的请求。单击提交按钮会创建一个新请求并从头加载页面。

PHP通过使用会话来维护状态信息来解决这个问题。会话是php表达"嘿,我知道这个人是谁,我以前见过他"的方式。

您可以通过以下方式使用会话来完成此操作。

<?php 
session_start();
?>
<!DOCTYPE html>
<html>
    <head>
    </head>
    <body>
        <form name="form" action="" method="post">
            <input name="button1" type="submit" value="Submit">
        </form>
        <hr>
    </body>
</html>
<?php
    if (isset($_POST['button1'])){ 
        $_SESSION["counter"] = (isset($_SESSION["counter"])?$_SESSION["counter"]:0) + 1;
        for ($i = 0;$i < $_SESSION["counter"];$i++) 
            echo 'Test';
    }
?>

你可以设置一个会话变量

<?php 
session_start();
        if (isset($_POST['button1'])){ 
            if(isset($_SESSION['myvar'])){
                $_SESSION['myvar'] .= 'Test';
            }else {
                $_SESSION['myvar'] = 'Test';
            }
            echo $_SESSION['myvar'];
        }
    ?>
<!DOCTYPE html>
<html>
    <head>
    </head>
    <body>
        <form name="form" action="" method="post">
            <input name="button1" type="submit" value="Submit">
        </form>
        <hr>
    </body>
</html>

我没有测试过这段代码,但它应该可以工作

注意:如果会话未启动,您可能会捕获潜在的错误这可能会回答你最初的问题,但是可能有更好的解决方案,这取决于你的最终目标是什么。

确保将上述PHP代码包含在HTML标记之上编辑:合并了Fred的建议