这是我目前拥有的代码的简化版本:
<!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的建议