Я пытаюсь реализовать базовую систему регистрации пользователей с использованием PHP.Когда у меня пустая таблица пользователей, я могу зарегистрировать одного пользователя.После регистрации поле пароля правильно сохраняется в виде хэша, но столбец для имени пользователя остается пустым в таблице SQL.После этой вставки я не могу вставлять больше строк (даже с совершенно разными именами пользователей и паролями), пока не удалю существующую единственную строку.
Я уже попытался удалить всю свою проверку, поэтому у меня меньше кода для устранения неполадокпока, пока я не смогу понять, что происходит.
Вот моя функция для выполнения вставки.
function registerUser($username, $password) {
$db = $this->getDbConnection();
if (!is_null($db)) {
$query = "INSERT INTO users (username, password) VALUES (?, ?)";
if($stmt = mysqli_prepare($db, $query)){
// Bind variables to the prepared statement as parameters
mysqli_stmt_bind_param($stmt, "ss", $param_username, $param_password);
// Set parameters
$param_username = $username;
$param_password = password_hash($password, PASSWORD_DEFAULT); // Creates a password hash
// Attempt to execute the prepared statement
if (mysqli_stmt_execute($stmt)) {
// Redirect to login page
header("location: /index.php");
exit();
} else {
echo "Something went wrong. Please try again later.";
}
}
// Close statement
mysqli_stmt_close($stmt);
}
mysqli_close($db);
}
Вот как я создал таблицу пользователей:
CREATE TABLE users (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
И, наконец, это моя HTML-форма:
<div class="vertical-center">
<div class="container roundedEdges mainContent divPadding10">
<h2 class="textCenter">Sign Up</h2>
<br>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
<div class="form-group <?php echo (!empty($username_err)) ? 'has-error' : ''; ?>">
<label>Username</label>
<input type="text" name="username" class="form-control" value="<?php echo $username; ?>">
<span class="help-block"><?php echo $username_err; ?></span>
</div>
<div class="form-group <?php echo (!empty($password_err)) ? 'has-error' : ''; ?>">
<label>Password</label>
<input type="password" name="password" class="form-control" value="<?php echo $password; ?>">
<span class="help-block"><?php echo $password_err; ?></span>
</div>
<div class="form-group <?php echo (!empty($confirm_password_err)) ? 'has-error' : ''; ?>">
<label>Confirm Password</label>
<input type="password" name="confirm_password" class="form-control" value="<?php echo $confirm_password; ?>">
<span class="help-block"><?php echo $confirm_password_err; ?></span>
</div>
<div class="form-group">
<input type="submit" class="btn btn-success" value="Submit">
<input type="reset" class="btn btn-danger" value="Reset">
</div>
<p>Already have an account? <a href="login.php">Login here</a>.</p>
</form>
</div>
</div>
Поля id, password и made_at обновляются очень хорошо, но проблема в имени пользователя.
РЕДАКТИРОВАТЬ:Моя функция находится внутри класса QueryRunner.Я звоню из другого файла, например:
require($_SERVER['DOCUMENT_ROOT'].'/DAL/queries.php');
$queryRunner = new QueryRunner;
$queryRunner->registerUser($username, $password);