Javascript 如何在PHP中防止多个表单提交
我正在尝试停止多个提交按钮。我不熟悉php和javascript。我尝试了许多不同的堆栈溢出答案选项。我检查了会话令牌,但它对我不起作用,因为我正在从javascript提交表单。您可以看到“禁用”按钮的代码。当我点击按钮时,它被禁用并提交表单,但它没有达到php的btn付费代码。请帮忙 php代码1:Javascript 如何在PHP中防止多个表单提交,javascript,php,jquery,Javascript,Php,Jquery,我正在尝试停止多个提交按钮。我不熟悉php和javascript。我尝试了许多不同的堆栈溢出答案选项。我检查了会话令牌,但它对我不起作用,因为我正在从javascript提交表单。您可以看到“禁用”按钮的代码。当我点击按钮时,它被禁用并提交表单,但它没有达到php的btn付费代码。请帮忙 php代码1: <?php include('sessionstart.php'); include('session.php'); include('processtransaction.php');
<?php
include('sessionstart.php');
include('session.php');
include('processtransaction.php');
?>
<script src="js/mytransaction.js"></script>
php代码1将调用javascript,javascript的表单为submit。如果表单已提交,则它将禁用/(会话令牌过程)付费按钮,并应调用btn付费代码
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
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);
}
?>
$(文档).ready(函数(){
var table=$('#myTransactionitems').dataTable();//初始化dataTable
var user=$(this.attr('id');
如果(用户!='')
{
$.ajax({
url:'交易',
数据类型:“json”,
成功:功能{
控制台日志;
table.fnClearTable();
对于(变量i=0;i
php代码2 processtransaction:
$(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
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.
});
$("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加载之前)立即提交的用户,您可以进行以下更改
在HTML表单中,将“禁用”添加到“提交”按钮:
<input type="submit" value="Submit" disabled />
这样做的目的是在JS加载之前禁用submit按钮。一旦JS加载,它将启用submit按钮,然后剩下的事情将像以前一样工作。最好用javascript做这样的事情,因为用PHP做这件事意味着第二次和后续的帖子已经执行了
PHP code1将调用javascript
-不会。PHP是服务器端代码,javascript是客户端代码,PHP无法调用javascriptjaromanda你能告诉我代码的哪一部分我做错了吗?jaromanda很抱歉,键入PHP code1时会包含jquery是错误的。我指出你关于PHP调用javascript的断言是错误的,代码本身没有什么,因为我从来没有读过包含引号中html的javascript代码,当我看到这一点时,我内心的孩子都哭了。谢谢AliIshaq。我在我的事务中使用了jquery下面的代码。它对我很有用。太好了!别忘了把答案标为正确。也可以在Enter键上运行相同的函数,看看这里:AliIshaq这个代码在我的本地机器上工作,但是如果我把代码放在godaddy中,如果在几秒钟内点击付费或取消按钮,那么需要7到8次点击,那么它就被禁用了。很抱歉再次问这个问题。你有什么想法吗?如果你多次提交按钮,上面的代码就不起作用了几秒钟内,我已经编辑了我的答案,添加了一个解决方法来解决这个问题。