#php #jquery #mysql #sql #passwords
Вопрос:
Я собираю данные из формы с помощью метода POST, и когда данные вводятся в форму и отправляются, данные добавляются в базу данных правильно.
Если я запущу его, как показано ниже, я не получу предупреждение, когда он будет выполнен, но данные будут правильно вставлены в базу данных.
Если я удалю хэширование паролей и добавлю пароль вручную в запрос, он все равно правильно введет данные в базу данных И выдаст мне предупреждение о том, что он принудил меня.
Я не могу понять, почему он будет предупреждать меня без пароля, но не будет, когда он включен. Даже несмотря на то, что данные хранятся в базе данных правильно на обоих.
Код для передачи данных из формы является:
$.ajax({
url: './php/accountcreate.php',
type: 'post',
data: $(".register-form").serialize(),
dataType: 'json',
success: function(data){
$option = data.output;
if($option == 1) {
alert("An account already exists with the email address " data.message " please login to your account.");
}
else if($option == 2) {
alert(data.message);
}
else if($option == 3) {
alert(data.message);
}
}
});
Код, который я использую для обработки данных и хранения их в базе данных (за вычетом проверок, если электронное письмо уже существует), является:
<?php
else {
//Account doesn't exist - lets create one
$firstname = stripslashes(strip_tags($_POST['firstname']));
$lastname = stripslashes(strip_tags($_POST['lastname']));
$dob = $_POST['dob-reg'];
$userpass = $_POST['passwordreg'];
$hashed_pass = password_hash($userpass, PASSWORD_DEFAULT);
$query = $connect -> prepare("INSERT INTO `Accounts` (`FirstName`, `LastName`, `DoB`, `Email`, `Password`) VALUES (?, ?, ?, ?, ?)");
$query -> bind_param("sssss", $firstname, $lastname, $dob, $email, $hashed_pass);
$query -> execute();
if($query -> affected_rows === 0) {
$connect -> close();
echo json_encode(array( "output" => "2",
"message" => "An error occured."));
return;
}
else {
//Data successfully inserted in to the database
$connect -> close();
echo json_encode(array( "output" => "3",
"message" => "$email"));
return;
}
}
}
?>
Комментарии:
1. 1. Сделайте пост вручную и понаблюдайте за реакцией. 2, Убедитесь
display_errors
, что включен иerror_reporting
включен. 3. Включите исключения и вложите код базы данных в попытку/улов.2. Используйте вкладку Сеть в DevTools, чтобы просмотреть исходный ответ на запрос AJAX.
3. Спасибо за комментарии, это помогло мне решить проблему сейчас.