Я работаю над системой регистрации/входа в PHP/MYSQL как неделю, и я действительно имею проблему с php password_hash и функцией password_verify ... Регистр работал, и логин с password_verify продолжает терпеть неудачу, и я не понимаю, почему .. Может кто-нибудь помогает? я действительно в отчаянии.Как сделать систему входа в систему с password_verify работать?
Вход в систему ..что я пытаюсь достичь 1-его проверки, если электронная почта пуста или нет, и если это действительный email..2 - его проверка, если пароль пуст или нет. 3-если оба $ email и $ password одобрены .. он подключается к db .. then a-it проверяет, существует ли электронная почта в табличных пользователях, если не требуется зарегистрировать..b - если пользователь существует в db, то он проверяет, является ли пароль $ таким же, как passsword в db ..., если он действительный пароль ... это эхо-код «valid» .. и если не правильный пароль ... он перекликается с «invalide email/password» ... который то, что я пытаюсь достичь ...
Здесь я отправляю полный код:
дизайн дб
user_id(auto_increment/primary key)
email(unique, varchar)
password(varchar, 255)
register.php
<?php
$email=$password="";
$emailErr=$passwordErr="";
if (isset($_POST['submit'])) {
if (empty($_POST['email'])) {
$emailErr="Enter your email";
}
elseif (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === FALSE) {
$emailErr = "Invalid email";
}
else
{
$email= trim($_POST['email']);
}
if (empty($_POST['password'])) {
$passwordErr = "Enter your password";
}
elseif (strlen($_POST['password']) < 3) {
$passwordErr = "password must 4 length least";
}
else
{
$password = trim($_POST['password']);
}
// if everything is filled correct connect
if ($email && $password)
{
include_once'connect.php';
$sql = "SELECT COUNT(users.email) FROM users WHERE email = :email";
$s = $pdo->prepare($sql);
$s->bindValue(':email', $email);
$s->execute();
$result = $s->fetch(PDO::FETCH_NUM);
$resultvalue = $result[0];
//if email exist, stop the script
if ($resultvalue > 0) {
echo "Email already exist";
exit();
}
// if email not exist insert it
else
{
$sql = "INSERT INTO users (email,password) VALUES (:email, :password)";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':email', $email);
$stmt->bindValue(':password', password_hash($password, PASSWORD_DEFAULT));
$stmt->execute();
if ($stmt) {
echo "Values inserted";
exit();
}
else
{
echo "Insert values failed";
exit();
}
}
}
//if everything is not filled correct connect
else
{
$proceedErr = "Could not proceed";
}
}//submit
?>
<!DOCTYPE HTML>
<html>
<head>
<title>Register page</title>
<style type="text/css">
form p label
{
display: block;
}
em
{
color: red;
font-style: normal;
}
</style>
</head>
<body>
<?php
if (isset($proceedErr)) {
echo $proceedErr;
}
?>
<form method="POST" action="">
<p>
<label for="email">Email :</label>
<input type="text" name="email" id="email" placeholder="Enter your email" value/><em><?php if(isset($emailErr)) echo $emailErr;?></em>
</p>
<p>
<label for="email">Password :</label>
<input type="password" name="password" id="password" placeholder="Enter your password" value/><em><?php if(isset($passwordErr)) echo $passwordErr;?></em>
</p>
<input type="submit" name="submit" id="submit" value="Register" />
</form>
</body>
</html>
login.php
<?php
$emailErr=$passwordErr="";
$email=$password="";
if (isset($_POST['submit'])) {
if (empty($_POST['email'])) {
$emailErr="Enter your email";
}
elseif (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === FALSE) {
$emailErr = "Enter valid email";
}
else
{
$email = trim($_POST['email']);
}
if (empty($_POST['password'])) {
$passwordErr="Enter your password";
}
else
{
$password= trim($_POST['password']);
}
if ($email && $password)
{
include_once'connect.php';
$sql = "SELECT user_id,email, password FROM users WHERE email = :email";
$s = $pdo->prepare($sql);
$s->bindValue(':email', $email);
$s->execute();
$result = $s->fetch(PDO::FETCH_ASSOC);
$resultvalue = count($result['email']);
print_r($result);
//if email do not exist, stop the script
if ($resultvalue < 1) {
echo "Your email do not exist, please register";
exit();
}
elseif (password_verify($password, $result['password'])) {
echo "valide password/email";
exit();
}
else
{
echo "InValid email/password";
exit();
}
}
else
{
echo "Email/password do not match";
}
}// end submit
?>
<!DOCTYPE HTML>
<html>
<head>
<title>Login page</title>
<style type="text/css">
form p label
{
display: block;
}
em
{
color: red;
font-style: normal;
}
</style>
</head>
<body>
<form method="POST" action="">
<p>
<label for="email">Email :</label>
<input type="text" name="email" id="email" placeholder="Enter your email" value/><em><?php if(isset($emailErr)) echo $emailErr;?></em>
</p>
<p>
<label for="email">Password :</label>
<input type="password" name="password" id="password" placeholder="Enter your password" value/><em><?php if(isset($passwordErr)) echo $passwordErr;?></em>
</p>
<input type="submit" name="submit" id="submit" value="login" />
</form>
</body>
</html>
Если вы не можете следовать этому рассказу моего доктора Сьюза [здесь] (http://stackoverflow.com/a/32556010), я бы посмел :) – Drew
@RyanVincent, вы просите войти или зарегистрировать часть ? –
@ RyanVincent для входа в систему..so..1-его проверка, если электронная почта пуста или нет, и если это действительный email..2 - его проверка, если пароль пуст или нет. 3-если оба $ email и $ password одобрены .. он подключается к db .. then a-it проверяет, существует ли электронная почта в табличных пользователях, если не требуется зарегистрировать..b - если пользователь существует в db, то он проверяет, является ли пароль $ таким же, как passsword в db ..., если он действительный пароль ... это эхо-код «valid» .. и если не правильный пароль ... он перекликается с «invalide email/password» ... который что я пытаюсь достичь ... –