2016-07-23 5 views
0

私は、ログイン/登録システムをPHPで作成しています。 パスワードの確認に大きな問題があります。 登録時にユーザーのパスワードをハッシュしますが、password_verify関数が機能していません。 あなたが見ることができる以下のコードでは、パスワードを取得するかどうかにかかわらず答えを得ようとしています...私はいつも "ERROR"を答えとして得ます... $ email = mysqli_real_escape_string($ con、$ _ POST [ Eメール']); $ password = mysqli_real_escape_string($ con、$ _ POST ['password']);パスワード確認機能が動作しない

$result=mysqli_query($con,"SELECT * FROM users WHERE 
email='$email'"); 
    $count=mysqli_num_rows($result); 
    $pass=mysqli_fetch_assoc(result); 
    if($count == 1) 
    { 
     if(password_verify($password,$pass['password'])) 
     { 
     $_SESSION['email']=$email; 
     if($checkBox="on") 
     { 
     setcookie("email",$email,time()+3600); 
     } 
     header("location: profile.php"); 
    } 

    } 
else { 
$error="Error with either the email or the password"; 
} 
+0

あなたはどのような '$のpassword'と'を参照してテストできます$ pass ['password'] 'は実際には等しいですか? –

+0

2つのことがありますが答えはありません。まず、セキュリティ上の問題を考慮し、バインドされた変数/パラメータをクエリに使用する必要があります。 2人のユーザーが同じパスワードを持っている場合、このクエリはそれらを区別しません。すべてのパスワードを異なるようにする1つの方法は、パスワードに追加されるランダムな塩を割り当てることです。 – gavgrif

+0

thats私は上記のコードで何をしている...彼らは等価ではありません – njazi

答えて

0

を試してみてください、あなたはパスワードを比較してはいけません。複数のユーザーが同じパスワードを持つ可能性があるためです。代わりに、電子メールIDを使用してパスワードを取得します。

$result=mysqli_query($con, "SELECT * FROM users WHERE 
email='$email'"); 

パスワードを比較/確認する前に、リクエストから取得したパスワードをハッシュします。

$password = mysqli_real_escape_string($con,$_POST['password']); 
$password = md5($password); //Or other hash scheme you are using. 

だからあなたのコードは次のようになります:

$password = mysqli_real_escape_string($con,$_POST['password']); 
$password = md5($password); 

$result=mysqli_query($con, "SELECT * FROM users WHERE 
email='$email'"); 
$pass=mysqli_fetch_assoc($result); 
if (password_verify($password, $pass['password'])) { 
    echo "Success"; 
}else { 
echo "Error"; 
} 

編集コード

これを試してみてください:

if(isset($_POST['submit'])) 
{ 

$email = mysqli_real_escape_string($con,$_POST['email']); 
$password = mysqli_real_escape_string($con,$_POST['password']); 

    $result=mysqli_query($con,"SELECT * FROM users WHERE email='$email'"); 
    $count=mysqli_num_rows($result); 

    if($count == 1) 
    { 
     $user = mysqli_fetch_assoc($result); 
     if (password_verify($password, $user['password'])) { 
     echo "Success"; 
     }else { 
     echo "Error"; 
     $error="Error with either the email or the password"; 
     die; 
     } 
     $_SESSION['email']=$email; 
     if($checkBox="on") 
     { 
     setcookie("email",$email,time()+3600); 
     } 
     header("location: profile.php"); 

    } 
    else { 
    $error="Error with either the email or the password"; 
    } 
+0

私は見ています...しかし、ウェブサイトに登録する。 ここでもハッシュする必要がありますか? – njazi

+0

パスワードをハッシュし、データベースに保存しましたか? あなたのコードでは、比較時にハッシュパスワードと通常のテキストパスワードを比較しています。それで、あなたにエラーを示しています。 ハッシュパスワードとハッシュパスワードを比較する必要があります。最初にパスワードをハッシュして比較してください。 –

+0

はい、2つのパスワードを比較する必要がある場合は、password_verify関数を使用します。それは私の問題です私はpassword_hash関数を使用して、password_verify関数を使用する必要があることを確認します。しかし、それは動作しません。データベースにプレーンテキストとして保存されません。それは暗号化されています – njazi

0

クエリでこの

$result=mysqli_query($con, "SELECT count(*) as total FROM users WHERE 
    password='$password'"); 
    $pass=mysqli_fetch_assoc($result); 
    $rowcount=mysqli_num_rows($result) 
    if ($rowcount >0)) { 
     echo "Success"; 
    } 
    else { 
     echo "Error"; 
    } 
+0

私は最初に登録したパスワードを手に入れました。それは成功したと言われました しかし、どんなタイプのものでも成功と言えば – njazi

関連する問題