PHP password_hash вызывает проблемы

#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. Спасибо за комментарии, это помогло мне решить проблему сейчас.