2017-11-24 6 views
-5

私は自分のウェブサイトのログインに取り組んでいます。ログインすると、そのユーザーが既にデータベースに存在するかどうかをチェックしません。あなたが登録していなくても誰でもサインインすることができます。未登録のユーザーはログインできます(PHP)

これはログイン用のコードです。

<?php 


    //database details 
     $servername = "localhost"; 
     $username = "myname"; 
     $password = "******"; 
     $dbname = "mydb"; 


     // Create connection 
     $conn = mysqli_connect($servername, $username, $password, $dbname); 
     session_start();   

     if(isset($_POST['email'])) 

    { 
     $email = $_POST ['email']; 
     $password =$_POST ['password']; 


     $query = "SELECT * FROM Users WHERE Email='$email' AND Password='$password'"; 


     $result = mysqli_query($conn, $query); 





     if($result==1) 
     { 

      header('Location: profile.php'); 
      exit(); 
     } 

     else 
     { 

     header('Location: failedlogin.html'); 
     exit(); 
     } 


    } 

?>

+4

1. SQLインジェクション。 2.平文のパスワードをDBに保存しないでください! 3. '$ result'は行数ではなく、' true/false'を返します。 – panther

+4

mysqli_query()は成功するとtrueを返します。クエリにエラーがないことを意味します..また、このコードがライブサーバーにないことを願っています。 SQLインジェクションが起こるのを待っています – Akintunde007

+2

また、パスワードをそのまま保存しないでください。 'password_hash'を使うことができます – Eddie

答えて

0

あなたのコードのユーザーアカウントがデータベースに存在するかどうかをチェックすることはありません。クエリがエラーなしで実行されたかどうかをチェックするだけです。これはうまくいくはずです:

$query = "SELECT * FROM Users WHERE Email='$email' AND Password='$password' LIMIT 1"; 
if($result = mysqli_query($conn, $query)){ 

    if(mysqli_num_rows($result) > 0){ 

     //user account exists 
     $member = mysqli_fetch_array($result, MYSQLI_ASSOC); 
     $email = $member["Email"]; 

    } else { 

     //user account does not exist 

    } 

} else { 

    echo "Error executing database query."; 

} 
関連する問題