2016-07-17 21 views
1

PHPとMySQLで認証フォームを作成しようとしていますが、機能しません。認証が機能しません

私を助けることができる人はいますか?先例ファイルでパスワードハッシュを行いましたが、リンクされていません。これは独立しています。

ありがとうございました!

<?php 

session_start(); 

function connect_db($host, $port, $db, $username, $password) 
{ 
    $pdo = new PDO("mysql:host=$host; port=$port; dbname=$db", $username, $password); 
    return $pdo; 
} 

if (isset($_POST["email"]) && isset($_POST["password"]) && !empty($_POST["email"]) && !empty($_POST["password"])) 
{ 
    $error_pass= ""; 
    $email = $_POST["email"]; 
    $password = $_POST["password"]; 

    try 
    { 
     $pdo = connect_db("localhost", 3306, "*******", "******", "*******"); 
     $sql = $pdo-> prepare("SELECT * FROM users WHERE email = :email AND password = :password"); 
     $sql->bindParam(':email', $email); 
     $sql->bindParam(':password', $password); 
     $sql->execute(); 
     $req = $sql->fetch(); 
     echo $req["password"] . "SALUT \n"; 
     var_dump($req["password"]); 
     if (password_verify($password, $req['password']) == 0) { 
      session_unset(); 
      $error_pass = "Incorrect email/password"; 
     } 

     else { 
      $_SESSION["name"] = $req["name"]; 
      header("Location: index.php", true, 302); 
     } 
    } 
    catch (PDOException $e) 
    { 
     echo $e->getMessage(); 
    } 

    if ($error_pass) { 
     echo $error_pass; 
    } 
} 

else { 
    echo "Some fields are missing"; 
} 
?> 
<!DOCTYPE html> 
<html> 
<body> 
    <form method="post" action ="login.php"> 
     <input type="text" name="email"> 
     <input type="text" name="password"> 
     <input type="submit" name="submit" value ="submit"> 
    </form> 
</body> 

</html> 
+0

bindParamは、とする必要がありますので、 '$ SQLベース> bindParam(「:メール」、$メール);' – Mihai

+0

、それは間違いだが、それは私の問題 –

+0

安全先端を解決しないはい申し訳ありません:あなたユーザー名+パスワードをインターネットに掲載しないようにする必要があります。また、プロダクションで使用する予定のパスワードであれば、そのパスワードを強くしてください。 – mpen

答えて

2

質問からパスワードを削除してください。電子メールでユーザーを見つけ、パスワードが正しいことを確認する必要があります。

$sql = $pdo-> prepare("SELECT * FROM users WHERE email = :email"); 
$sql->bindParam(':email', $email); 
$sql->execute(); 
$req = $sql->fetch(); 

// @todo :: check did you got any users 

if (password_verify($_POST["password"], $req['password'])) { 
    // password is valid 
} 
+1

うん。データベースのパスワードはハッシュされているので、ハッシュされていないバージョンはハッシュされたバージョンと決して等しくないので、 '$ sql-> fetch();'は0行を返します。 –

関連する問題