PHP Скрипт выполняется после обновления - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть кнопка, которая выполняет код php после щелчка (я тестирую что-то с помощью EMails, и все работает до сих пор, кроме этой проблемы с проблемой «PHP Загрузка скриптов после Refre sh»):

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 на сайте все работает, и сценарий не выполняется, прежде чем я нажимаю одну из кнопок. Это прекрасно -> НО, когда я обновляю sh страницы, скрипт выполняется без моего нажатия кнопки.

Как я могу предотвратить загрузку скрипта после refre sh?

1 Ответ

0 голосов
/ 16 апреля 2020

Отображение такого типа сообщения часто называется «fla sh message»: отображение сообщения, которое появляется один раз, а не отображается после refre sh.

Ваша проблема связана с поведением браузера: если страница загружается из запроса POST, затем, если пользователь нажмет кнопку refre sh, он создаст новый запрос POST с тем же параметром POST

Но вам нужно: если страница загружается из POST запрос, затем, если пользователь нажмет кнопку refre sh, он создаст новый запрос GET (конечно: без параметра POST)

Это может быть достигнуто с помощью сеанса, шаг следующий:

  • пользователь нажимает кнопку (1 или 2)

  • POST to self button1 = Button1 или button2 = Button2

  • Страница, обрабатывающая запрос (выполняет функцию mail)

  • Перенаправление страницы / refre sh для отображения нового сообщения, ранее сохраненного в переменной сеанса.


<?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"]);
}
?>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...