簡體   English   中英

我怎樣才能讓我的提交按鈕點擊一次並仍然執行我的 php?

[英]how can i make my submit button clickable once and still execute my php?

我試過解決這個問題,但無論我嘗試什么,按鈕都不會保持禁用狀態超過一秒鍾,也不會執行我的 PHP 腳本。

我的網頁上有一個重啟按鈕,點擊后會向管理員發送一封電子郵件,讓他們知道已請求重啟。 我希望它能夠被點擊一次,然后變灰以防止多次點擊。 我希望它在一段時間后再次活躍

如何讓重新啟動按鈕變為可點擊一次(以排除執行過多腳本的可能性)並仍然執行 PHP 腳本?

這是我的代碼:

<form action=index.php method= "post">
<input type="submit" value="Request Restart" id="alertTimerButton" name="clickMe" onclick="countClicks();"/>

<?php
if (isset($_POST['clickMe']))
{
    exec("/anaconda3/bin/python /Users/shoot_station_5/Sites/simpleblogs/restartemail.py \"$input_val\""); 
} else{

}

我嘗試添加各種 javascript,例如:

function disable()
  $(document).ready(function(){
      $('.once-only').submit(function(){
      $(this).children('button').prop('disabled', true);
      alert("Thankyou a restart has been requested.");
  });
});

<script type="text/javascript">
  var ClickCount = 0;
  function countClicks() {
    var clickLimit = 1; //Max number of clicks
    if(ClickCount>=clickLimit) {
      alert("a restart has already been requested");
      return false;
    }
    else
    {
      ClickCount++;
      alert("Thankyou a restart has been requested.");
      return true;
    }
  }

你必須改變

onclick="countClicks();"

onclick="return countClicks();"

那么您的 2. 解決方案確實有效。

您的 1. 解決方案有多個錯誤。 不要將代碼包裝在 disable() 函數中。 並且在“按鈕”之前缺少一個#。

我會這樣做:

onclick="disabled=true;" 

就夠了。

因為您評論說您沒有運行第二個解決方案,所以這里是代碼:

 var ClickCount = 0; function countClicks() { var clickLimit = 1; //Max number of clicks if (ClickCount >= clickLimit) { alert("a restart has already been requested"); return false; } else { ClickCount++; alert("Thank you a restart has been requested."); return true; } }
 <form action="#" method="post"> <input type="button" value="Request Restart" id="alertTimerButton" name="clickMe" onclick="return countClicks();"/> </form>

那么按鈕按預期工作。 由於您在此處不使用 ajax/xhr,因此您會在提交表單時重新加載頁面。 這就是按鈕被重置的原因。 如果您不想使用 ajax/xhr,只需保存您的“狀態”和會話變量中的時間,然后根據它更改按鈕屬性。 你的 html/php 看起來像這樣

session_start();
if (isset($_POST['clickMe'])) {
    $_SESSION['restarted'] = time();
}
session_write_close();
$timeout = 300; // 5 min
$timer = time();
$disabled = false;
if (isset($_SESSION['restarted']) && ($timer - $_SESSION['restarted']) < $timeout) {
    $disabled = true;
}

.. (html stuff) ...
<form action=test.php method= "post">
    <input type="hidden" name="timer" value="<?php echo (isset($_SESSION['restarted']) ? $_SESSION['restarted'] : null)?>" />
    <input type="submit" <?php echo ($disabled ? 'disabled="true"' : null)?> value="Request Restart" id="alertTimerButton" name="clickMe"/>
</form>

而你的 js 是這樣的(如果你使用 jquery)

$(document).ready(function(){
    $('form').on('submit', function(e){
        alert("Thankyou a restart has been requested.");
        return true;
    });

    var restart_time = parseInt($('input[name="timer"]').val());
    var cur_time;
    setInterval(function(){ 
        cur_time = Math.floor(Date.now() / 1000);
        if (cur_time - restart_time > 300000) {
            $('#alertTimerButton').prop('disabled', false);
        }
    }, 5000);
});

編輯:我稍微修復了代碼並在 javascript 中添加了時間檢查。

暫無
暫無

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

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