繁体   English   中英

PHP 脚本在刷新后执行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM