Hey I've seen all the solutions here on StackOverflow on the topic but they seem to not work, I don't know why. I've this code inside the $(form).submit(function(e){...});
event handler.
e.preventDefault();
let formData = new FormData();
formData.append('username', username.value);
formData.append('password', password.value);
$.ajax({
url: 'login.php',
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function(response) {
console.log(response);
},
error: function() {
console.log('fail');
}
})
By the look of things, I think the login.php is receiving the formData value because when I submit the form nothing happens.
This is the login.php
<?php
session_start();
$password = $username = '';
$_SESSION['user'] = '';
if($_SERVER['REQUEST_METHOD'] == 'POST') {
if(isset($_POST['login'])) {
include_once('db.php');
$username = strip_tags($_POST['username']);
$passd = strip_tags($_POST['password']);
$passd = md5($password);
$sql = "select * from users where username = '" . $username . "' limit 1";
$query = mysql_query($sql);
if($query) {
$row = mysql_fetch_assoc($query);
$dbpass = $row['password'];
if($password == $dbpass) {;
$_SESSION['user'] = $username;
header('Location: admin.php');
} else {
echo 'Wrong username or password!';
}
} else {
echo mysql_error();
}
}
}
?>
How do I make this work? Thank you in advance.
</div>
remove
let formData = new FormData();
formData.append('username', username.value);
formData.append('password', password.value);
and replace
data: formData,
with :
data: {username: username.value, password: password.value}
Since you already have a form
, you can serialize()
and send data this way:
e.preventDefault();
var paramsToSend = {};
paramsToSend['formData'] = $('form').serialize();
$.ajax({
url: 'login.php',
type: 'POST',
data: {params:JSON.stringify(paramsToSend)},
contentType: false,
success: function(response) {
console.log(response);
},
error: function() {
console.log('fail');
}
})
In your server-side, you can:
$parameters = json_decode($_POST['params']);
FormData
object works perfectly here. Here I used dataType='json'
in ajax opts indicating that ajax expects json data from server side.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript">
function _submit(){
let formData = new FormData();
formData.append('username', 'atauruser'); //you can set your expected username
formData.append('password', 'ataurpass'); //you can set your expected password.
$.ajax({
url: 'login.php',
type: 'POST',
data: formData,
dataType:'json',
processData: false,
contentType: false,
success: function(response) {
console.log(response);
$('#response').html(response);
},
error: function() {
console.log('fail');
}
});
}
</script>
<button class="b" id="n" onclick="_submit()">Send Data</button>
<div id="display"></div>
<p id="response"></p>
</body>
And your server side code simply login.php
<?php
$incoming = array ($_POST['username'],$_POST['password']);
echo json_encode($incoming);
?>
</div>