Hi everyone I am trying to submit a form without the page reloading, a seemingly straightforward thing with AJAX, but I can’t seem to get any changes on my database. I have an alert set in my javascript to run if the AJAX was successful, and it seems to trigger every time, so I think the variables are, indeed, getting sent out of the AJAX, but when I get to join.php, I don’t think it remembers, and therefore doesn’t process correctly.
First of all, here is the relevant script.js:
$(document).ready(function () {
//----SUBMIT---//
$(".submit").click(function () {
// validate and process form here
$('.error').hide();
var studentEmail = $("input#studentEmail").val();
if (studentEmail == "") {
$("label#studentEmail_error").show();
$("input#studentEmail").focus();
return false;
}
var studentPassword = $("#studentPassword").val();
var parentEmail = $("#parentEmail").val();
var parentPassword = $("#parentPassword").val();
var studentFirstName = $("#studentFirstName").val();
var studentLastName = $("#studentLastName").val();
var studentPhone = $("#studentPhone").val();
var parentFirstName = $("#parentFirstName").val();
var parentLastName = $("#parentLastName").val();
var parentPhone = $("#parentPhone").val();
var dataString = 'studentEmail=' + studentEmail
+ '&studentPassword=' + studentPassword
+ '&parentEmail=' + parentEmail
+ '&parentPassword=' + parentPassword
+ '&studentFirstName=' + studentFirstName
+ '&studentLastName=' + studentLastName
+ '&studentPhone=' + studentPhone
+ '&parentFirstName=' + parentFirstName
+ '&parentLastName=' + parentLastName
+ '&parentPhone=' + parentPhone;
alert(dataString);
$.ajax({
type: "POST",
url: "join.php",
data: dataString,
success: function () {
alert("success");
}
});
return false;
});
});
Then join.php
if($_POST) {
$studentEmail=$_POST['studentEmail'];
$studentPassword=$_POST['studentPassword'];
$parentEmail=$_POST['parentEmail'];
$parentPassword=$_POST['parentPassword'];
$studentFirstName=$_POST['studentFirstName'];
$studentLastName=$_POST['studentLastName'];
$studentPhone=$_POST['studentPhone'];
$parentFirstName=$_POST['parentFirstName'];
$parentLastName=$_POST['parentLastName'];
$parentPhone=$_POST['parentPhone'];
//create database connection
$connection = mysql_connect("localhost","XXXX","XXXX");
//in case database connection fails
if(!$connection) {
die("Database connection failed: ".mysql_error());
}
else{
//select database to use
$db_select = mysql_select_db("XXXX",$connection);
//in case database selection fails
if (!$db_select) {
die("Database selection failed: " . mysql_error());
}
else {
//make sql query
$sql = "INSERT INTO clients (`studentEmail`,
`studentPassword`,
`parentEmail`,
`parentPassword`,
`studentFirstName`,
`studentLastName`,
`studentPhone`,
`parentFirstName`,
`parentLastName`,
`parentPhone`)
VALUES ('".$studentEmail."',
'".$studentPassword"',
'".$parentEmail."',
'".$parentPassword."',
'".$studentFirstName."',
'".$studentLastName."',
'".$studentPhone."',
'".$parentFirstName."',
'".$parentLastName."',
'".$parentPhone."')";
//set results to variables
$result = mysql_query($sql);
//in case query fails
if (!$result) {
die("Database query failed: " . mysql_error());
}
}
}
}
else {
echo "FAIL";
}
Try to change the
$.post()call into this:And, at the beginning of PHP code, place this:
This way, the alert message will display the data received from PHP.
UPDATE:
Since I see nobody here is seeing the hugest security risk with that code, I add it here:
Be very sure that you pass every single string from post through
mysql_real_escape_string()before adding it inside the query!What if anybody posts this as his email address??:
UPDATE:
I double-checked documentation of
jQuery.ajax()andjQuery.post(). While.post()is just a shortcut for.ajax(), their syntax is different:(updated code above too).
UPDATE:
Try this code, that should work “out of the box”:
The JavaScript:
The PHP code