2017-10-22 7 views
0

基本的な質問ですが、私は失敗し続けます。同様のトピックをチェックアウトしたが解決策に近づかなかったので、私がリダイレクトしないようにして、私の欠点を指摘してください。ありがとうございました。php password_hashとpassword_verifyが失敗する

<?php 

$hashed_password = ""; 
$con = mysqli_connect("localhost", "root", "", "testTable"); 

if (isset($_POST["reg_button"])){ 

$password = ($_POST["reg_password"]); 

$hashed_password = password_hash($password, PASSWORD_DEFAULT); 

$query = mysqli_query($con, "INSERT INTO user VALUES('', '$hashed_password')"); 

} 
?> 

<!DOCTYPE html> 
<html> 
<head> 
    <title>register</title> 
</head> 
<body> 
    <form action="register.php" method="POST"> 
     <input type="password" name="reg_password" placeholder="Password"> 
     <br><br> 
     <input type="submit" name="reg_button" value="Register"> 
    </form> 
    <br> 
    <form action="login.php" method="POST"> 
     <input type="password" name="login_password" placeholder="Password"> 
     <br><br> 
     <input type="submit" name="login_button" value="Login"> 
    </form> 
</body> 
</html> 

これは登録部分であり、問​​題なく動作しています。提供されたパスワードが取得され、DBに格納されています。

<?php 

include "register.php"; 

$con = mysqli_connect("localhost", "root", "", "testTable"); 

if(isset($_POST["login_button"])){ 

    $password = password_verify($_POST["login_password"], $hashed_password); 

    $checkDB = mysqli_query($con, "SELECT * FROM user WHERE password = '$password'"); 

    $checkLogin = mysqli_num_rows($checkDB); 

    if($checkLogin == 1){ 
     $row = mysqli_fetch_array($checkDB); 

     echo "Welcome"; 
    } 

    else { 
     echo "Password incorrect"; 
    } 
} 
?> 

これはログイン部分であり、常に失敗します。私は、次のスニペットが原因であると思われます:

$password = password_verify($_POST["login_password"], $hashed_password); 

しかし、それを修正する方法はありません。

助けがあれば助かります。ありがとうございました!

更新されたコード:

register.php:

<?php 

$hashed_password = ""; 
$name = ""; 
$con = mysqli_connect("localhost", "root", "", "testTable"); 

if (isset($_POST["reg_button"])){ 

    $password = ($_POST["reg_password"]); 
    $name = ($_POST["reg_name"]); 

    $hashed_password = password_hash($password, PASSWORD_DEFAULT); 

    $query = mysqli_query($con, "INSERT INTO user VALUES('', '$name','$hashed_password')"); 

} 
?> 

<!DOCTYPE html> 
<html> 
<head> 
    <title>register</title> 
</head> 
<body> 
    <form action="register.php" method="POST"> 
     <input type="text" name="reg_name" placeholder="Name"> 
     <br><br> 
     <input type="password" name="reg_password" placeholder="Password"> 
     <br><br> 
     <input type="submit" name="reg_button" value="Register"> 
    </form> 
    <br> 
    <form action="login.php" method="POST"> 
     <input type="text" name="login_name" placeholder="Name"> 
     <br><br> 
     <input type="password" name="login_password" placeholder="Password"> 
     <br><br> 
     <input type="submit" name="login_button" value="Login"> 
    </form> 
</body> 
</html> 

login.php?:以下

<?php 

include "register.php"; 

$con = mysqli_connect("localhost", "root", "", "testTable"); 

if(isset($_POST["login_button"])){ 

    $name = $_POST['login_name']; 
    $password = $_POST['login_password']; 

    $checkDB = mysqli_query($con, "SELECT * FROM user WHERE name = '$name'"); 

    $passwordField = null; 

    while($getRow = mysqli_num_rows($checkDB)){ 
     $passwordField = $getRow['password']; // Get hashed password 
    } 

    if(password_verify($password, $passwordField)){ 
     echo('Correct'); 
    }else{ 
     echo('Wrong'); 
    } 
} 
?> 

答えて

0

これはwhileループとmysqli_fetch_array()で実行できます。それはあなたの問題を解決する必要があります。

<?php 

$con = mysqli_connect("localhost", "root", "", "testtable"); 

if(isset($_POST["login_button"])){ 

    // $password = password_verify($_POST["login_password"], $hashed_password); 
    $password = $_POST['password']; 
    $checkDB = mysqli_query($con, "SELECT * FROM user"); 

    while($getRow = mysqli_fetch_array($checkDB)){ 
     $passwordRow = $getRow['password']; 
    } 

    if(password_verify($password, $passwordRow) === TRUE){ 
     echo('Welcome'); 
    }else{ 
    echo('Wrong credentials'); 
    } 
} 
?> 
+0

詳細な回答ありがとうございます。あなたのコードを使用しようとするとうまく動作しますが、ログインする際には私が直面していることです:致命的なエラー:30秒の最大実行時間がC:\ xampp \ htdocs \ test \ login.phpの16行目を超えました。 'while'でクラッシュする – idontgetit

+0

フォームには1つのフィールド(パスワード)しかありませんか? – Sanjay

+0

いいえ、「名前」フィールドも追加しました。上記の更新コードをご覧ください。 – idontgetit

1

あなたがregister.phpを含む場合であっても$ hashed_pa​​sswordを得るか、そこから、それらの値は設定されていないので、何もしません。

$password = password_verify($_POST["login_password"], $hashed_password); 

まず、dbから取得する必要があります。

次に、password_verifyはtrueまたはfalseを返します。したがって、$ hashed_pa​​sswordが設定されていても、$ passwordはブール値になります。

+0

私が行ったように "register.php"を含めると、$ hashed_pa​​sswordがその値を取得すると思いました。そうじゃない?その後、どのように値を割り当てる必要がありますか? – idontgetit

+0

@ idontgetitログインと登録を同時に行うことはできません。データベースからのハッシュを取得してください: 'SELECT pass_column FROM ... WHERE username = .. ' – Mihai

+0

ありがとうMihai – idontgetit

関連する問題