2016-07-23 6 views
-1

Ich versuche zu stoppen multiple submit buttons.Ich bin neu zu PHP und Javascript.Ich habe viele verschiedene Optionen von Stack-Overflow-Antworten versucht.Ich habe Session-Token überprüft, aber es ist nicht funktioniert für mich, weil ich das Formular von JavaScript einreiche.Sie können den Code zu deaktivierter Taste sehen. Wenn ich auf die Schaltfläche klicke, wird es deaktiviert und das Formular wird übermittelt, aber es erreicht nicht den btn-bezahlten Code von PHP. Bitte helfen Sie.Wie zu verhindern, Mehrfachformulierungen in PHP

php code1:

<?php 
include('sessionstart.php'); 
include('session.php'); 
include('processtransaction.php'); 
?> 
<script src="js/mytransaction.js"></script> 

php code1 die JavaScript-Aufruf und Javascript, das Formular hat. Wenn das Formular abgeschickt wird, wird der Knopf/bezahlt (session token process) und der Code von btn-paid aufgerufen.

JavaScript-Code mytransaction:

$(document).ready(function() { 
    var table = $('#myTransactionitems').dataTable(); //Initialize the datatable 
    var user = $(this).attr('id'); 
    if(user != '') 
    { 
     $.ajax({ 
      url: 'transactions', 
      dataType: 'json', 
      success: function(s){ 
       console.log(s); 
       table.fnClearTable(); 
       for(var i = 0; i < s.length; i++) { 
        var disp1 = ''; 
        if (s[i][4] != 'Reserved') { 
         disp1 = 'display:none;' 
        } 
        table.fnAddData([ 
         "<form method='post' action='reservationdetails'><input name = 'transactionid' type='hidden'\ 
        value='"+s[i][0]+"'></input><input type='submit' id = 'btn-bank' name='btn-bank' value = '"+s[i][0]+"' class='btn btn-link'>\ 
        </input></form>", 
         s[i][1], 
         s[i][2], 
         s[i][3], 
         s[i][4], 
         s[i][5], 
         "<form method='post'><input name = 'transactionid' type='hidden'\ 
        value='"+s[i][0]+"'><input name = 'donationid' type='hidden'\ 
        value='"+s[i][2]+"'><input name = 'splitamount' type='hidden'\ 
        value='"+s[i][3]+"'></input></input><input type='submit' id = 'btn-paid' name='btn-paid' value = 'Paid' onclick='this.disabled=true;this.form.submit();' style='" + disp1 +"' class='btn btn-sm btn-success pull-left '>\ 
        </input></form><form method='post'><input name = 'transactionid' type='hidden'\ 
        value='"+s[i][0]+"'><input name = 'donationid' type='hidden' \ 
        value='"+s[i][2]+"'><input name = 'splitamount' type='hidden'\ 
        value='"+s[i][3]+"'></input><input type='submit' id = 'btn-cancel' name='btn-cancel' value = 'Cancel' onclick='this.disabled=true;this.form.submit();' style='" + disp1 +"' class='btn btn-sm btn-danger pull-right'>\ 
        </input></form>" 
         ]);        
       } // End For 

      }, 
      error: function(e){ 
       console.log(e.responseText);  
      } 
     }); 
    } 
}); 

php code2 processtransaction:

<?php 
if (isset($_POST['btn-paid'])) { 
    require_once("dbcontroller.php"); 
    $db_handle = new DBController(); 
    $conn = $db_handle->connectDB(); 

    $query = "update MYTRANSACTION set STATUS =? where DONATION_ID=? AND ID=?"; 
    $stmt = $conn->prepare($query); 
    $stmt->bind_param("sii",$status,$donation_id, $transaction_id); 
    $stmt->execute(); 
    $stmt->close(); 

    $db_handle->closeDB($conn); 
} 
?> 
+0

es ist besser, so etwas in Javascript zu tun, weil es PHP bedeutet, die zweite und folgende Beiträge wurden bereits durchgeführt –

+0

'php code1 wird das Javascript aufrufen' - nein es wird nicht. PHP ist Server-Side-Code, Javascript ist Client-Seite, es gibt keine Möglichkeit für PHP, Javascript zu rufen –

+0

Jaromanda können Sie mir bitte zeigen, welchen Teil des Codes ich falsch mache. –

Antwort

1

Wenn Sie den Benutzer aus, klicken Sie zweimal, bevor Seite Enden geladen (was 2 Beiträge), wäre es besser verhindern wollen benutze Javascript. Wie Sie bereits jQuery verwenden, können Sie folgendes tun:

$("input[type='submit']").click(function(e) { 
    e.preventDefault(); // Prevent the page from submitting on click. 
    $(this).attr('disabled', true); // Disable this input. 
    $(this).parent("form").submit(); // Submit the form it is in. 
}); 

Edit:

Um gerecht für jemanden sofort einreichen, bevor Seite geladen wird vollständig (dh vor JS Lasten), können Sie folgende Änderungen vornehmen.

In Ihrem HTML-Formular, um Ihre Submit-Button deaktiviert hinzufügen:

<input type="submit" value="Submit" disabled /> 

Und Ihre JS wie folgt ändern:

$("input[type='submit']").attr('disabled', false); // Enable this input. 
$("input[type='submit']").click(function(e) { 
    e.preventDefault(); // Prevent the page from submitting on click. 
    $(this).attr('disabled', true); // Disable this input. 
    $(this).parent("form").submit(); // Submit the form it is in. 
}); 

Was das bedeutet ist, macht die deaktiviert Submit-Button bis JS hat geladen. Sobald JS geladen ist, wird die Übermittlungsschaltfläche aktiviert und die verbleibenden Dinge funktionieren wie zuvor.

+0

Dank AliIshaq.I Benutze deinen Code unter jquery innerhalb von mytransaction.Es funktioniert für mich. –

+0

Großartig! Vergessen Sie nicht, die Antwort als richtig zu markieren. Sie können die gleichen Funktionen auch auf der Eingabetaste ausführen, werfen Sie einen Blick darauf: http://stackoverflow.com/questions/979662/how-to-detect-pressing-enter-on-keyboard-using-jquery – AliIshaq

+0

AliIshaq Dieser Code funktioniert in meinem lokalen Computer, aber wenn ich den Code in godaddy und wenn der Klick auf die Schaltfläche "Bezahlen" oder Abbrechen sofort in Bruchteil von Sekunden, dann dauert es 7 bis 8 Klicks, dann ist es deaktiviert.Schnell für diese Frage erneut. Haben Sie irgendeine Idee bitte. –

Verwandte Themen