如何防止PHP中的多个表单提交
How to prevent multiple form submissions in PHP
我正在尝试停止多个提交按钮。我是php和javascript的新手。我确实尝试了很多不同的堆栈溢出答案选项。我确实检查了会话令牌,但它对我不起作用,因为我是从JavaScript提交表单的。您可以看到禁用按钮的代码。当我点击按钮时,它被禁用并提交表单,但它没有达到php的btn付费代码。请帮忙。
php代码1:
<?php
include('sessionstart.php');
include('session.php');
include('processtransaction.php');
?>
<script src="js/mytransaction.js"></script>
phpcode1将调用javascript,javascript具有表单submit。如果提交了表单,那么它将禁用/(会话令牌进程)按钮payed,并且它应该调用btn payed的代码。
javascript代码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代码2进程事务:
<?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);
}
?>
如果你想防止用户在页面加载结束前点击两次(导致两个帖子),最好使用javascript。由于您已经在使用jQuery,您可以执行以下操作:
$("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.
});
编辑:
为了满足在页面完全加载之前(即JS加载之前)立即提交的用户,您可以进行以下更改。
在HTML表单中,将禁用添加到提交按钮:
<input type="submit" value="Submit" disabled />
并将您的JS更改为以下内容:
$("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.
});
这样做的目的是在JS加载之前禁用提交按钮。一旦JS加载,它将启用提交按钮,然后剩下的事情将像以前一样工作。
相关文章:
- 'Alajax' Jquery 简单表单提交.如果表单未经验证,如何防止提交
- 如何防止引导模式关闭表单提交使用代码点火器
- Ajax数据表单序列化防止双重提交
- 在客户端(使用 JavaScript/JQuery)应该在多大程度上防止快速表单提交
- 防止在 Jquery 表单提交时加载页面,但“无”显示按钮
- 如何防止表单提交时出现“您确定要离开此页面吗?”警报
- 表单提交后防止默认
- jQuery 表单插件 - 如何防止重复提交
- 防止在表单提交后重定向到 PHP 文件
- 如何在未单击单选按钮时防止表单提交
- 如何防止页面在表单提交时重新加载,并显示一个小文本说“已成功注册”
- 如何将块UI与setTimeout一起使用,并在表单提交时防止默认
- 如何防止表单提交时重定向
- 当重点放在特定输入上时,如何防止表单提交
- 防止无JS的重复表单提交
- 如何防止非提交按钮的表单提交
- 如何防止表单提交时出现默认情况
- 禁用表单提交可防止发送按钮属性
- 表单提交监听器防止在IE8上提交表单
- jQuery表单提交,防止第一次提交后多次发送