Не удалось вставить данные в базу данных с использованием подготовленного оператора в PHP, об ошибке не сообщалось - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь создать регистрационную форму, которая хранит введенные пользователем данные в базе данных MySQL.Я смог заставить его работать, вручную установив значения, но узнал, что лучше всего использовать подготовленные операторы.Вот как выглядит мой PHP-код:

<?php

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "accounts";

//Creating a new connection to the database
$connection = new mysqli($servername, $username, $password, $dbname);

//Checking the connection
if ($connection->connect_error) {
    die("Connection failed: " . $connection->connect_error);
}

//SQL string used to insert the data into the database
$sql = "INSERT INTO users (name, email, password) VALUES (?, ?, ?)";

$stmt = mysqli_stmt_init($connection);
if (!mysqli_stmt_prepare($stmt, $sql)) {
    echo "Failed";
} else {
    mysqli_stmt_bind_param($stmt, "sss", $_POST["name"], $_POST["email"], $_POST["passowrd"]);
    mysqli_stmt_execute($stmt);
}
?>

И это HTML-код:

<div id="wrapper">
    <div id="formContent">
        <h3>Complete the following form to register an account:</h3>

        <form class="register" action="registration.php" method="post">

            Email: <input type="email" name="email" required> <br></br>
            Name: <input type="name" name="name" required> <br></br>
            Password: <input type="password" name="password" required> <br></br>
            Confirm Password: <input type="password" name="confirmed_password" required> <br></br>
            <input type="submit" name="submit">

        </form>
    </div>
</div>

Приведенный код не возвращает ошибок, но база данных не обновляется.Я уже некоторое время ломаю голову, поэтому любая помощь приветствуется.

1 Ответ

0 голосов
/ 02 декабря 2018

Во-первых, у вас есть опечатка для password (у вас есть $_POST['passowrd']), а во-вторых, это основано на примере из документации:

# Prepare (use the OOP version of this library)
$query  =   $connection->prepare("INSERT INTO users (`name`, `email`, `password`) VALUES (?, ?, ?)");
# Bind parameters and spell "password" correctly
$query->bind_param('sss', $_POST['name'], $_POST['email'], $_POST['password']);
# Execute
$query->execute();
# See if the row was created and echo success
echo ($query->affected_rows > 0)? 'Success!' : 'Failed';

Вы должны использовать password_hash() (хранение) и password_verify() (проверка) или эквивалентная библиотека bcrypt (если ваша версия php не имеет этих встроенных функций).При использовании этих функций убедитесь, что столбец password имеет длину около 255 символов, чтобы не обрезать хэш пароля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...