亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在提交表單時禁用提交按鈕,同時仍然允許 PHP 腳本運行

在提交表單時禁用提交按鈕,同時仍然允許 PHP 腳本運行

森欄 2022-07-08 10:52:02
我有一個簡單的接受表單,它有一個用戶單擊的按鈕。在表單提交時,我有一個 php 腳本,它對一個 python 腳本進行命令行調用,該腳本將記錄添加到我的數據庫中。除了一件事之外,一切都很好:我不希望用戶能夠多次單擊按鈕。如果我使用 javascript 禁用按鈕,我的 if (isset($_POST['submit'])) 語句不會評估為 true,然后我的 php 不會運行如果我在 php 腳本中調用 javascript 函數,用戶仍然有機會在 php 腳本調用該函數以禁用該按鈕之前多次單擊該按鈕。這允許他們在我的數據庫中創建多條記錄。我的想法是讓我的 python 腳本,即添加記錄的腳本,首先檢查數據庫中是否已經存在具有相同信息的記錄,如果沒有則只創建一個新記錄。我擔心的是,如果用戶多次單擊提交按鈕,可能是多個 php 將執行多個調用,第二個將在第一個調用創建新記錄之前檢查是否已經創建了記錄。換句話說,也許 php 調用將同時工作(異步?)并且檢查數據庫不會涵蓋同時創建記錄的另一個調用。這是一個有效的擔憂嗎?關于如何禁用或隱藏我的按鈕但仍然運行我的 php 腳本還有其他想法嗎?謝謝你。對于未來的觀眾,我最終使用的解決方法是基于 Teemu 在下面的評論中所說的。在將表單提交中的新記錄添加到數據庫之前,我檢查了是否已經存在包含該信息的記錄。如果沒有,我添加了一條記錄,如果是,則單擊按鈕什么也沒做。正如 Teemu 所提到的,此檢查無論如何都是必要的,以涵蓋即使頁面上沒有按鈕也可以發布的多個提交。這就是我所說的“解決方法”而不是答案,因為用戶仍然可以多次單擊提交按鈕,但只有第一次單擊有效。在 php 完成運行后,該按鈕會自行隱藏。
查看完整描述

2 回答

?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

您只需要在提交提交后disabled設置。您可以使用零延遲來實現:setTimeout


$('.myForm').submit(function () {

  setTimeout(() => {

    $(this).find('[type=submit]').prop('disabled', true)

  }, 0)

})

然后,將發生以下情況:

  • 表單提交事件被觸發,因為用戶單擊或按下了按鈕Enter

  • 瀏覽器正在調用您的submit處理程序

  • 你正在“武裝”你的超時

  • 瀏覽器正在向服務器提交表單(帶有提交按鈕的值)

  • 之后您的超時立即觸發,禁用按鈕

請注意,我submit在表單上使用了處理程序,而不是click在按鈕上使用了處理程序,因為當焦點位于表單字段上時,也可以通過按下來提交Enter表單,而不僅僅是通過單擊按鈕。然而,由于表單提交的工作方式,禁用該按鈕將阻止提交Enter。


查看完整回答
反對 回復 2022-07-08
?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

我最近遇到了類似的情況,有時我會雙擊“反彈”。這是我處理它的兩種方法:


1) 只需禁用按鈕,將 AJAX 數據發送到 PHP 并在成功時恢復按鈕


$("#save_button").click(function (e) {

            e.preventDefault();

            $(this).attr("disabled", true);

            var settings = $('form').serialize();

            console.log("settings are ", settings);

            $.post("data/ajax.php", settings, function (data) {

                data = JSON.parse(data);

                console.log("data back from save is ", data);

                $("#save_button").removeAttr("disabled");

            })

        });

2)創建一個'nobounce'功能(它基本上做同樣的事情,但是在一個計時器上。它使用起來有點簡單,因為它只需要在你想要禁用的任何按鈕上設置類'nobounce',雖然它是在計時器上,發布完成后啟用按鈕并不準確。


    $('.nobounce').click(function () {

        $(this).attr("disabled", true);

        setTimeout(function () {

            $('.nobounce').removeAttr("disabled");

        }, 3000);

    });

這些都是 jquery 方法 - 將表單保留在頁面上。從您的描述看來,您可能正在通過 PHP 提交表單(請,如果這不是您需要的答案,請提供一些您正在使用的代碼,這樣可以更清楚?。?。如果您通過 PHP 提交,那么對原始問題的一些評論非常有效。


希望這會有所幫助 - 再次,如果沒有,請提供一些代碼,您可以獲得更直接的幫助。


查看完整回答
反對 回復 2022-07-08
  • 2 回答
  • 0 關注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號