簡體   English   中英

點擊按鈕調用 PHP

[英]Call PHP on button click

我有以下按鈕:

<input type="submit" name="kudos_button" value="★ Give kudos"/>'

出於測試目的,我在</html>之后制作了一個 PHP 腳本,如下所示:

<?php
    if(isset($_POST['kudos_button'])){
        $message = "Pressed";
        echo "<script type='text/javascript'>alert('$message');</script>";
        //and then execute a sql query here
    }
?>

一切正常,按下kudos_button時會顯示消息。 但問題是當用戶刷新頁面時,消息又出現了。 我收到以下消息:

您正在查找的頁面使用了您輸入的信息。 返回該頁面可能會導致您重復執行的任何操作。 你想繼續嗎?

有什么提示可以避免這種情況,因此刷新時按鈕不會再次按下?

這是我的解決方案:

<form name="form1" method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>" >
    <input type="submit" name="kudos_button" value="★ Give kudos"/>
</form>

<?php
    if(isset($_POST['kudos_button'])){
        $message = "Pressed";
        echo "<script type='text/javascript'>alert('$message');</script>";
        //and then execute a sql query here
    }
?>

應該可以正常工作。

但是您應該知道 PHP 無論警報如何都能正常工作。 無論哪種方式,您的 SQL 語句將在按下按鈕后執行。

JavaScript 是基於客戶端的腳本,PHP 是基於服務器的腳本是兩個不同的東西。

- - 編輯 - -

我構建了一個基於 Function 的 PHP 腳本,它正在調用警報並感覺 5 秒鍾以休眠,以便可以顯示警報。

這是我完成的解決方案:

<form name="form1" method="POST" action="./" >
    <input type="submit" name="kudos_button" value="★ Give kudos"/>
</form>

            <?php
                if(isset($_POST['kudos_button'])){
                    session_start();
                    $_SESSION["Button_onClick"] = 1;
                    $message = "Pressed";
                    if ($_SESSION["Button_onClick"] == 1) {
                        Button_onClick();
                        $_SESSION["Button_onClick"] = 0;
                        if ($_SESSION["Button_onClick"] == 0) {
                            BackLoop();
                        }
                    }
                }
                
                Function Button_onClick(){
                    $message = "Pressed";
                    echo ("
                        <script type='text/javascript'>
                            alert('$message');
                        </script>
                    ");
                    SQL_Statement();
                }
                
                Function SQL_Statement() {
                    //and then execute a sql query here
                }
                
                Function BackLoop() {
                    session_destroy();
                    echo("
                        <script>
                            setTimeout(function () {
                                //Redirect with JavaScript
                                window.location.href= './';
                            }, 5000);
                        </script>
                    ");
                }
            ?>

以防萬一有人有問題。 我添加了 setTimeout function 以便我可以在網站上看到更改。 如果您在警報(用戶案例)之后不想要任何信息,您可以刪除 function。 你只需要window.location.href= './'; .

如果您不想導航到新頁面,則不能使用常規表單提交。

用 JavaScript 代替 HTTP 請求。

例如

const form = document.querySelector("form");
const responseHandler = response => response.json();
const dataHandler = data => {
    alert(data.message);
};
const submitHandler = event => {
    event.preventDefault()
    const data = new FormData(form);
    const url = "/path/to/dedicated/webservice/that/returns/json";
    fetch(url, { method: "POST", body: data }).then(responseHandler).then(dataHandler);
};
form.addEventListener("submit", submitHandler);

MDN 有使用 fetch 的指南

然后您的服務器端代碼將如下所示:

<?php
// Execute a sql query here

header("Content-Type: application/json");
$message = "Pressed";
echo json_encode( [ message => $message ] );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM