У меня проблема с моей проверкой и регистрацией пароля.Проверка формы и пароля в php
Проблема в том, что я создал валидацию, и она работает, а затем я создал раздел хэш-пароля и он тоже работает ... НО теперь проверка не работает.
Кажется, что он пропускает проверку и сохраняет информацию в базе данных и имеет пароль. Как я могу сделать так, чтобы проверка и хеширование пароля и сохранение информации в базе данных работали?
Я не знаю, как объяснить больше, но если вы не понимаете или не нуждаетесь в дополнительной информации, расскажите мне.
Пользователь вставляет информацию в форму, а затем переходит к проверке и проходит проверку, если нет ошибок в проверке, она переходит к try/catch и вставляет информацию в базу данных и «хэш», пароль.
Две части (валидация и вставка в базу данных с помощью хеш-пароля) работают отлично друг от друга, но когда у меня есть две части вместе, проверка не работает, она пропускает ее.
HTML-форма
<form action="index.php" method="post">
<table>
<tr><td>
<label for="fullname">Fullname<span class="req">*</span></label>
</td>
<td><input type="text" name="fullname" value="<? echo $fullname ?>"><span class="error"><?php echo $fullnameErr; ?></span>
</td></tr>
<tr><td>
<label for="email">Email<span class="req">*</span></label></td>
<td><input type="email" name="email" value="<? echo $email ?>"><span class="error"><?php echo $emailErr; ?></span>
</td></tr>
<tr><td>
<label for="user">Username<span class="req">*</span></label>
</td>
<td><input type="text" name="user" value="<? echo $user ?>"><span class="error"><?php echo $userErr; ?></span>
</td></tr>
<tr><td>
<label for="pass">Password</label><span class="req">*</span</td>
<td><input id="pass" name="pass" type="password" value=""><span class="error"><?php echo $passErr; ?></span>
</td></tr>
<tr><td>
<label for="rePass">Re-Password</label><span class="req">*</span</td>
<td><input id="rePass" name="rePass" type="password" value=""><span class="error"><?php echo $rePassErr; ?></span>
</td></tr>
<tr><td><input type="submit" name="submit" value="Sign Up">
</td></tr>
</table>
</form>
А вот проверка PHP и сохранение в базу данных с хэшированным паролем.
<?php
$fullname = $user = $email = $pass = $rePass = "" ;
$fullnameErr = $userErr = $emailErr = $passErr = $rePassErr = "";
?>
<?php
if(isset($_POST["submit"])){
$fullname = trim($_POST["fullname"]);
$email = trim($_POST["email"]);
$user = trim($_POST["user"]);
$pass = trim($_POST["pass"]);
$rePass = trim($_POST["rePass"]);
if (!preg_match("/^[A-Za-z ]*$/", $fullname)) {
$fullnameErr = "Only letters are allowed";
}
if (!preg_match("/^[A-Za-z0-9]*$/",$user)) {
$userErr = "Only letters and numbers are allowed";
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Invalid email format";
}
if (!strlen($pass) > 8) {
$passErr = "Password at least 8 characters";
}
if (empty($_POST["fullname"])) {
$fullnameErr = "Fullname is required";
}
if (empty($_POST["email"])) {
$emailErr = "Email is required";
}
if (empty($_POST["user"])) {
$userErr = "Username is required";
}
if (empty($_POST["pass"])) {
$passErr = "Password is required";
}
if (empty($_POST["rePass"])) {
$rePassErr = "re-enter password is required";
}
if ($_POST["rePass"] != $_POST["pass"]) {
$rePassErr = "The re-entered password don't match";
}
try{
require_once("db_connect.php");
$options = [
'cost' => 12,
];
$hashedPass = password_hash($pass, PASSWORD_BCRYPT, $options);
$query = "INSERT INTO users (fullname, email, user, pass) ";
$query .= "VALUES (:fullname, :email, :user, :pass)";
$ps = $db->prepare($query);
$result = $ps->execute(
array(
'fullname' => $fullname,
'email' => $email,
'user' => $user,
'pass' => $hashedPass
));
if($result){
header("Location: index.php?signup=true");
}else {
echo "Signup failed";
}
}catch(Exception $exception) {
echo "Query failed, see below: <br><br>";
echo $exception."<br /><br />";
}
}
?>
Благодарим за помощь!
Ну код собирает ошибки, но ничего с этим не делать ошибок. Он просто сохраняет значения независимо от наличия ошибок. – martinstoeckli
@martinstoeckli, да, это была проблема, но я нашел решение, добавив «if (empty ($ fullnameErr) && empty ($ emailErr) && empty ($ userErr) && empty ($ passErr) && empty ($ rePassErr))) {«перед попыткой/уловить и закрыть его после этого. –