2017-06-08 11 views
0

ログインフォームを作成中で、何らかの理由でパスワードが確認されません。ユーザーは、電子メールとパスワードでシステムにログインすることになっていました。私は電子メールに基づいてユーザーをデータベース内のデータと照合しています。それを見ていただけますか?ログインフォームでパスワードが確認されない

Customer table

HTML形式ファイルで

    
 

 
<div id="test-popup" class="white-popup mfp-hide col-sm-4 col-sm-offset-4 col-xs-10 col-xs-offset-1 align-center"> 
 
    <img src="images/logo-white.png" alt="" height="120px" width="120px" /> 
 
    <h5 class="font-alt">Login to Your Account</h5> 
 
    <br/> 
 
    <form method="post" action="login.php" class="form"> 
 
     <div class="mb-20 mb-md-10"> 
 
     <input type="text" name="email" id="email" class="input-md form-control" placeholder="Email" required /> 
 
     </div> 
 
     <div class="mb-20 mb-md-10"> 
 
     <input type="password" name="password" id="password" class="input-md form-control" placeholder="Password" required /> 
 
     </div> 
 
     <div class="mb-20 mb-md-10"> 
 
     <input type="submit" name="login" class="login btn btn-mod btn-medium" id="btnLogIn" value="Login" /> 
 
     </div> 
 
    </form> 
 
</div>

ファイルlogin.phpのindex.php

<?php 
require_once 'connection_db.php'; 
$response = new stdClass; 
if (empty($_POST['email']) || empty($_POST['password'])) { 
    $response->success = false; 
    $response->message = 'Email and password cannot be empty.'; 
} else { 
    $sql = 'SELECT * FROM `customer` WHERE `email` = ? '; 

    $email = $_POST['email']; 
    $password = $_POST['password']; 
    $password = password_hash($password, PASSWORD_DEFAULT); 
    // print_r($password, true); 

    try { 
     $stmt = $db->prepare($sql); 
     $stmt->bind_param('s', $email); 
     $stmt->execute(); 
     $result = $stmt->get_result(); 
     $array = $result->fetch_array(MYSQLI_ASSOC); 
     // print_r($array, true); 
     if (count($array)) { 
      $response->success = true; 
      $response->message = 'Login successful.'; 
      session_start(); 
      $_SESSION['email'] = $email; 
      $_SESSION['id'] = $id; 
      $_SESSION['current_page'] = $_SERVER['HTTP_REFERER']; 
      header("Location: ". $_SESSION['current_page']); 

     } else { 
      $response->success = false; 
      $response->message = 'Wrong username or password.'; 
      header("Location: index.php#test-popup"); 
     } 
    } 
    catch (Exception $e) { 
     $response->success = false; 
     $response->message = "Error."; 
    } 
} 
// unset($db); 
?> 
+0

だから、dbからのパスワードと入力からのパスワードを比較しますか? –

+2

ログインスクリプト内でpassword_verifyする必要はありませんpassword_hash – Option

+0

まず、http://php.net/manual/en/function.filter-input.phpを使用することをお勧めします。 $配列は何を出力しますか? – Edwin

答えて

3

ここではどのようにログインスクリプトの汎用的な設定は必要があります見て:

if (isset($_POST['submit'])) 
{ 
    $email = $_POST['email']; 
    $password = $_POST['password']; 

    if (!empty($email) && !empty($password)) 
    { 
     $res = $dbh->prepare("SELECT * FROM `customer` WHERE `email` = ?"); 
     $res->execute([$email]); 

     $row = $res->fetch(MYSQLI_ASSOC); 

     if ($res->rowCount() > 0) 
     { 
      if (password_verify($password, $row['password'])) 
      { 
       $_SESSION['user_session'] = $row['uid']; 

       header('Location: loggedIn.php'); 
      } else { 
       // echo incorrect pass 
      } 
     } else { 
      // echo no such user... 
     } 
    } else { 
     // echo something... 
    } 
} 

ログインスクリプトにはpassword_verifyを使用する必要があります。提出されたパスワードをハッシュする登録には、password_hashのみを使用します。

+0

MySQLiを使っている場合、 '$ array = $ result-> fetch_array(MYSQLI_ASSOC);' $ row = $ res-> fetch(PDO :: FETCH_ASSOC);の代わりに '? @Option –

+0

それははい、申し訳ありませんが動作します。私は今あなたのために私の側を編集します。 – Option

+0

これは私をlogin.phpにリダイレクトしています。これはWRONG/RIGHT資格情報の両方の場合、HTMLフォームの '

のアクションとして設定されます –

関連する問題