我正在使用AJAX通過SQL在表中創建新行。我的代碼非常簡單,但我注意到它偶爾會在數據庫中創建重複條目(有時甚至是3)。有沒有辦法來防止這種情況?這裏是我的代碼(通過PHP回聲發送)。AJAX:重複條目
已更新的主要PAGE
echo "
<script language='javascript'>
$('#newreportBTN').live(\"click\", function() {
//Get variables from boxes
var data = $(\"#newreport\").serialize();
$.ajax({
type: 'POST',
url: \"report_new.php\",
data: data,
success: function (html) {
//if process.php returned 1/true (send mail success)
if (html==1) {
//Send notification to user
$('#adminReportInfo').fadeOut(300);
//if process.php returned 0/false (send mail failed)
} else alert('Sorry, unexpected error. Please try again later.');
}
});
//cancel the submit button default behaviours
return false;
});
</script>
";
report_new.php
<?php
//Start session
session_start();
//Include database connection details
require_once('config.php');
//Array to store validation errors
$errmsg_arr = array();
//Validation error flag
$errflag = false;
//Connect to mysql server
$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if(!$link) {
die('Failed to connect to server: ' . mysql_error());
}
//Select database
$db = mysql_select_db(DB_DATABASE);
if(!$db) {
die("Unable to select database");
}
//Function to sanitize values received from the form. Prevents SQL injection
function clean($str) {
$str = @trim($str);
if(get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
return mysql_real_escape_string($str);
}
$company = $_POST['company'];
$claimnumber = $_POST['claimnumber'];
$fullname = $_POST['fullname'];
$dateofloss = $_POST['dateofloss'];
$foruser = $_POST['foruser'];
$status = $_POST['status'];
//Input Validations
if($company == '') {
$errmsg_arr[] = 'Company Missing';
$errflag = true;
}
if($claimnumber == '') {
$errmsg_arr[] = 'Claim # Missing';
$errflag = true;
}
if($fullname == '') {
$errmsg_arr[] = 'Full name missing';
$errflag = true;
}
//If there are input validations, redirect back to the registration form
if($errflag) {
$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
session_write_close();
header("location: user_error.php");
exit();
}
//Create INSERT query
$qry = "INSERT INTO documents (company, claimnumber, fullname, dateofloss, foruser, status) VALUES ('$company', '$claimnumber','$fullname','$dateofloss','$foruser','$status')";
$result = @mysql_query($qry);
//Check whether the query was successful or not
if($result) {
//header("location: admin.php?status=new");
echo '1';
exit();
}else {
die("Query failed");
echo mysql_error();
}
?>
您確實不應該使用GET來插入數據。 GET應該只是讀取數據。你有這個特殊原因嗎? –
@Tieson:使用本教程:http://www.queness.com/post/160/create-a-ajax-based-form-submission-with-jquery – Zakman411
我明白了。你沒有義務接受我的建議,但現在你違反了慣例。使用POST也很容易,因爲可以使用'.post()'和''方便地序列化和提交表單。serialize()'方法。我會在下面發佈一些示例代碼。 –