[英]PHP Script executes after Refresh
我有一个按钮,单击后执行 php 代码(我正在使用电子邮件测试某些东西,到目前为止一切正常,除了“刷新后加载 PHP 脚本”问题的这个问题):
HTML:
<form method="post">
<input type="submit" name="button1"
class="button" value="Button1" />
<input type="submit" name="button2"
class="button" value="Button2" />
</form>
PHP:
<?php
if(array_key_exists('button1', $_POST)) {
button1();
}
else if(array_key_exists('button2', $_POST)) {
button2();
}
function button1() {
echo "mail";
}
function button2() {
ini_set( 'display_errors', 1 );
error_reporting( E_ALL );
$from = "test@example.de";
$to = "thisIsA@secret.de";
$subject = "Betreff";
$message = "Text";
$headers = "From:" . $from;
mail($to,$subject,$message, $headers);
echo "Test email sent";
}
?>
当我第一次 go 到站点时,在我按下其中一个按钮之前,一切正常且脚本未执行。 那是完美的->但是当我刷新页面时,脚本会在我没有按下按钮的情况下执行。
刷新后如何防止脚本加载?
显示这种消息通常被称为“闪烁消息”:显示一次出现的消息,刷新后不再显示。
您的问题来自浏览器的行为:如果页面是从 POST 请求加载的,那么如果用户点击刷新按钮,它将使用相同的 POST 参数发出新的 POST 请求
但是你想要的是:如果一个页面是从一个 POST 请求中加载的,那么如果用户点击刷新按钮,它将发出一个新的 GET 请求(当然:没有任何 POST 参数)
使用session可以实现,步骤如下:
用户单击按钮(1 或 2)
POST 到自己 button1=Button1 或 button2=Button2
页面处理请求(做邮件功能)
页面重定向/刷新以显示先前保存在 session 变量中的新消息。
<?php
session_start();
if(array_key_exists('button1', $_POST)) {
button1();
}
else if(array_key_exists('button2', $_POST)) {
button2();
}
function button1() {
$_SESSION["msg"] = "mail";
echo "<script>window.location = window.location.pathname;</script>";
exit();
}
function button2() {
ini_set( 'display_errors', 1 );
error_reporting( E_ALL );
$from = "test@example.de";
$to = "thisIsA@secret.de";
$subject = "Betreff";
$message = "Text";
$headers = "From:" . $from;
mail($to,$subject,$message, $headers);
$_SESSION["msg"] = "Test email sent";
echo "<script>window.location = window.location.pathname;</script>";
exit();
}
?>
<form method="POST">
<input type="submit" name="button1"
class="button" value="Button1" />
<input type="submit" name="button2"
class="button" value="Button2" />
</form>
<?php
if(isset($_SESSION["msg"]) && !empty($_SESSION["msg"])){
echo $_SESSION["msg"];
$_SESSION["msg"] = null;
unset($_SESSION["msg"]);
}
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.