I've been trying to do an ajax form for my web page.
Form sending informations into register.php
for check process. If its OK they are adding into database.
Problem is :
First record is always working properly. But if i try to add another record into database it gives parsererrorDetails : SyntaxError: Unexpected end of input
error.
If the current information already exist in database i put the error message to the screen. But if i try to send another record it gives the same error.
I think i can't get the second data after submitting the first one is not coming back as a JSON.
Here is my code . Any help much appricated.
Server Side / register.php
I've got header('Content-type: application/json');
on the top.
try {
// local db connection
$conn = new PDO('mysql:host=localhost;dbname=db_trop@Dubai;charset=utf8','root','mysql');
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if (isset($_POST)) {
// CHECK IF PASSWORD ALREADY IN USE
$objP = clear(strtoupper($_POST['objPass'])); // Get Ajax Data
// $stmt = $conn->prepare('SELECT Id,PassNumber FROM tblRecords WHERE PassNumber = ?');
// $stmt->execute(array($objP));
$stmt = $conn->prepare('SELECT Id,PassNumber FROM tblRecords WHERE PassNumber = :passnum');
$stmt->bindParam(':passnum', $objP);
$stmt->execute();
$PassResult = $stmt->fetchAll();
// (PDO::FETCH_ASSOC)
if($PassResult) {
// IF THE PASSWORD FAILS
$response_array['status'] = 'fail';
$response_array['message'] = 'Parola Kullanılıyor';
echo json_encode($response_array);
die();
} else {
// ADD DATA TO DATABASE
$fTerms = intval($_POST['objTerms']);
$fNameSurname = clear(strtoupper($_POST['objNameSurname']));
$fMail = clear($_POST['objEmail']);
$fGsm = clear(intval($_POST['objGsm']));
$fAddress = clear(strtoupper($_POST['objAdres']));
$DateTime = date('d-m-Y h:i:s');
if($fTerms==1) {
// SQL
$SqlQuery = "INSERT INTO tblRecords(NameSurname, Email, Gsm, Address, PassNumber,DateAdded, IsChecked)
VALUES (:fNameSurname, :fMail, :fGsm, :fAddress,:objP, :DateTime,:fTerms)";
// RECORDS
$addRecords = $conn->prepare($SqlQuery);
$addRecords->bindParam(':fNameSurname', $fNameSurname, PDO::PARAM_STR);
$addRecords->bindParam(':fMail', $fMail, PDO::PARAM_STR);
$addRecords->bindParam(':fGsm', $fGsm, PDO::PARAM_INT);
$addRecords->bindParam(':objP', $objP, PDO::PARAM_STR);
$addRecords->bindParam(':fAddress', $fAddress, PDO::PARAM_STR);
$addRecords->bindParam(':DateTime', $DateTime, PDO::PARAM_STR);
$addRecords->bindParam(':fTerms', $fTerms, PDO::PARAM_STR);
$addRecords->execute();
// END OF RECORD PROCESS
if ($addRecords) {
$response_array['status'] = 'success';
$response_array['message'] = 'BRAVO';
$conn = null;
} else {
$response_array['status'] = 'fail';
$response_array['message'] = 'OLMADI';
$conn = null;
}
} else {
die();
}
}
}
and Client Side / main.js
$("#register").submit(function (event, request) {
var password = $(this).find('input[name="objPassword"]').val();
var namesurname = $(this).find('input[name="objNameSurname"]').val();
var email = $(this).find('input[name="objEmail"]').val();
var gsm = $(this).find('input[name="objGsm"]').val();
var adres = $(this).find('input[name="objAddress"]').val();
var termsOk = $(this).find('input[name="objAcceptTerms"]').val();
var formURL = $(this).attr("action");
var postMessage;
if (postMessage) {
postMessage.abort();
}
var postData = {"objPass": password, "objNameSurname": namesurname, "objEmail": email, "objGsm": parseInt(gsm), "objAdres": adres, "objTerms": termsOk };
postMessage = $.post(formURL, postData, function (data) {
$('#register').trigger("reset");
})
.done(function(data) {
var defaultText = '';
if(data.status == 'success'){
$( ".info-row span" ).html(data.message);
$("#register").find('input[name="objPassword"]').val('');
$("#register").find('input[name="objNameSurname"]').val('');
$("#register").find('input[name="objEmail"]').val('');
$("#register").find('input[name="objGsm"]').val('');
$("#register").find('input[name="objAddress"]').val('');
$("#register").find('input[name="objAcceptTerms"]').val('');
$('input:checkbox').removeAttr('checked');
$('input').removeClass("error");
$('input[type=text]').focus(function() {
defaultText = $(this).val();
$(this).val('');
$( ".info-row span" ).html("");
});
// $('#register').trigger("reset");
console.log(data);
} else if(data.status == 'fail'){
$( ".info-row span" ).html(data.message);
$("#register").find('input[name="objPassword"]').val('');
$("#register").find('input[name="objNameSurname"]').val('');
$("#register").find('input[name="objEmail"]').val('');
$("#register").find('input[name="objGsm"]').val('');
$("#register").find('input[name="objAddress"]').val('');
$("#register").find('input[name="objAcceptTerms"]').val('');
$('input:checkbox').removeAttr('checked');
$('input').removeClass("error");
$('input[type=text]').focus(function() {
defaultText = $(this).val();
$(this).val('');
$( ".info-row span" ).html("");
});
console.log(data);
// $('#register').trigger("reset");
}
}) .fail(function (jqXHR, textStatus, errorThrown) {
alert(JSON.stringify(textStatus));
// $( ".info-row span" ).html(textStatus);
console.error("Error: " + textStatus + "Details : " + errorThrown);
// console.error("Error: " + textStatus + "Details : " + errorThrown);
}) .always(function(data) {
$('#register').trigger("reset");
});
event.preventDefault();
});
What i want to do is that:
Users can enter their informations consecutively and after each form has submitted i want to put error message on the screen (which is working right now but not working after first submit.)
Thanks