-1

私はPHP / MYSQL登録/ログインシステムに1週間ほど取り組んでいますが、本当にphp password_hashとpassword_verify関数に問題があります...登録は機能し、password_verifyでのログインは失敗し続け、理由がわかりません..誰か助けてもらえますかアウト?私は本当に必死です。

ログイン部分..私が達成しようとしているもの 1-メールが空かどうか、有効なメールかどうかを確認します.2-パスワードが空かどうかを確認します。3-$email と $password の両方に問題がない場合..データベースに接続します..次に、a-電子メールがテーブル users に存在するかどうかを確認し、存在しない場合は登録する必要があります..b-ユーザーが db に存在する場合、次に、$password が db のパスワードと同じかどうかを確認します...有効なパスワードの場合は「有効」と表示され、有効なパスワードでない場合は「無効な電子メール/パスワード」と表示されます...つまり私が達成しようとしていること...

ここに私は完全なコードを投稿しています:

デシベルデザイン

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>
4

1 に答える 1

0

ここで同じスクリプトをテストしたところ、うまくいきました。

回答として「有効なパスワード/メール」を受け取ったので、この条件ステートメント「(password_verify($password, $result['password']))」は true を返しました (login.php 内の 51 行目)。

エラー メッセージまたは警告が表示されますか?

于 2015-11-05T22:09:19.467 に答える