为了账号安全,请及时绑定邮箱和手机立即绑定

刷新后执行 PHP 脚本

刷新后执行 PHP 脚本

慕少森 2022-07-01 10:30:04
我有一个按钮,单击后执行 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";    } ?>当我第一次访问该站点时,在我按下其中一个按钮之前,一切正常且脚本未执行。那是完美的->但是当我刷新页面时,脚本会在我没有按下按钮的情况下执行。刷新后如何防止脚本加载?
查看完整描述

1 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

显示这种消息通常被称为“闪烁消息”:显示一次出现的消息,刷新后不再显示。

您的问题来自浏览器的行为:如果页面是从 POST 请求加载的,那么如果用户点击刷新按钮,它将使用相同的 POST 参数发出新的 POST 请求

但是你想要的是:如果一个页面是从一个 POST 请求中加载的,那么如果用户点击刷新按钮,它将发出一个新的 GET 请求(当然:没有任何 POST 参数)

可以通过session来实现,步骤如下:

  • 用户单击按钮(1 或 2)

  • POST 到自己 button1=Button1 或 button2=Button2

  • 页面处理请求(做邮件功能)

  • 页面重定向/刷新以显示先前保存在会话变量中的新消息。


<?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(!empty($_SESSION["msg"])){

    echo $_SESSION["msg"];

    $_SESSION["msg"] = null;

    unset($_SESSION["msg"]);

}

?>


查看完整回答
反对 回复 2022-07-01
  • 1 回答
  • 0 关注
  • 134 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号