我有5个输入和一个html表。我需要检查html表中的复选框,这样我就需要遍历表并获取数据。 5个输入和html表上的数据是相关的,所以如果其中一个insert语句失败,这将是一个问题。
到目前为止验证输入并检查html表复选框是否有效,但是如果我的一个insert语句失败了怎么办?话虽这么说,如果失败,我需要删除插入的数据。
这是我网站的结构:
insert
if
声明此处以检查复选框是否已选中if
是的然后是
- > AJAX代码在这里
- >拨打另一个insert
声明else
- >没有要保存的数据,因为输入和html表值彼此需要更新:
如果即将使用交易我该怎么办?在我的网站上 我使用两个不同的php文件进行插入。一个在循环中。一个用于5个输入 这是我的代码
var checkedItems = $('#dataTable input[type="checkbox"]:checked').each(function() {
$.ajax({
type: "POST",
url: "insertdocumentsignatory.php",
data: ({dtnum: tnum, dsignum: signum})
})
.done(function (msg) {
alert("Data Saved: " + msg);
})
.fail(function() {
alert( "Posting failed." );
});
});
});
if (!checkedItems.size()) {
alert ("Nothing checked");
return;
}else if (checkedItems.size()) {
$.ajax({
type: "POST",
url: "insertdocument.php",
data: ({dtnum: tnum, ddoctitle: doctitle, ddoctype: doctype, ddoccontent: doccontent, ddocdatefilled: docdatefilled})
})
.done(function (msg) {
alert("Data Saved: " + msg);
})
.fail(function() {
alert( "Posting failed." );
});
}
答案 0 :(得分:2)
您可以在事务中编写插入查询。如果任何插入失败,那么它就可以回滚。
答案 1 :(得分:2)
您应该使用PDO交易。示例事务如下所示:
<?php
$pdo->beginTransaction();
$checkbox = 1; // suppose checkbox is checked
if($checkbox) {
$insert = $pdo->prepare("INSERT INTO anytable (anyrow) VALUES (?)");
$insert->bindValue(1, "anyvalue");
$insert->execute();
if($insert->rowCount() > 0) {
$insert2 = $pdo->prepare("INSERT INTO anytable2 (anyrow2) VALUES (?)");
$insert2->bindValue(1, "anyvalue2");
$insert2->execute();
if($insert2->rowCount() > 0) {
$pdo->commit();
} else {
$pdo->rollBack();
}
} else {
$pdo->rollBack();
}
}
?>
答案 2 :(得分:2)
交易将确保全部或全部发生。大多数领先的数据库管理系统都支持事务功能。由于您使用的是PHP,我在下面找到了链接,它解释了如何使用PHP + MySql的事务