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

PHP在提交后保留打印/回显的值,php,echo,Php,Echo,这是我目前拥有的代码的简化版本: <!DOCTYPE html> <html> <head> </head> <body> <form name="form" action="" method="post"> <input name="button1" type="submit" value="Submit"> </form&g

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

<!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,但当我再次点击它时,它会清除第一个echo,并重新打印它,所以输出仍然是一个测试。PHP中是否有任何方法阻止它清除第一个回音,从而使输出成为TestTest?

web是无状态的。每次单击submit,您都会启动一个新请求,就服务器而言,该请求来自一个全新的用户。web服务器不记得或不关心您刚才是否提出了请求。单击submit按钮创建一个新请求并从头开始加载页面

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

您可以通过以下方式使用会话执行此操作

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

网络是无状态的。每次单击submit,您都会启动一个新请求,就服务器而言,该请求来自一个全新的用户。web服务器不记得或不关心您刚才是否提出了请求。单击submit按钮创建一个新请求并从头开始加载页面

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

您可以通过以下方式使用会话执行此操作

<?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';
    }
?>
你可以设定一个

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

注意:如果会话未启动,您可能需要捕获潜在错误 这可能会回答您最初的问题,但根据您的最终目标,可能会有更好的解决方案

确保在html标记上方包含上述php代码 编辑:合并Fred sugestions

您可以设置

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

注意:如果会话未启动,您可能需要捕获潜在错误 这可能会回答您最初的问题,但根据您的最终目标,可能会有更好的解决方案

确保在html标记上方包含上述php代码
编辑:Fred sugestions公司

@apokryfos这是一条路吗?我对PHP是相当陌生的,我认为会有一个函数来实现这一点?如果不在请求之间持久化输出,就不会有。。。。默认情况下,PHP执行并终止每个请求,除非您在请求会话、数据库、缓存存储、,etc@apokryfos这是路吗?我对PHP是相当陌生的,我认为会有一个函数来实现这一点?如果不在请求之间持久化输出,就不会有。。。。默认情况下,PHP会在每个请求中执行和终止,除非您在请求会话、数据库、缓存存储之间特别保留信息,否则您会有一种输入答案的感觉。当我注意到你删除了你的评论以建议使用会话时,我的蜘蛛侠感觉有点刺痛:可能想给他们最终销毁会话的选项,作为重置。@apokryfos打败了我。我贴出了一个几乎重复的答案:这个答案应该被接受,因为它给出了比我更好的解释,因为我觉得你已经给出了答案。当我注意到你删除了你的评论以建议使用会话时,我的蜘蛛侠感觉有点刺痛:可能想给他们最终销毁会话的选项,作为重置。@apokryfos打败了我。我发布了一个几乎重复的答案:这个答案应该被接受,因为它给出了一个更好的解释,比我可能想要在打开php标签之前去掉前导空格的解释要好;这可能会抛出一个headers发送的通知。您还需要修复您的答案,因为这将在。。。在第一次单击时。可能希望在打开php标记之前去掉前导空格;这可能会抛出一个headers发送的通知。您还需要修复您的答案,因为这将在。。。第一次点击。