2017-05-04 50 views
0

我有登錄問題,當我輸入正確的用戶名和密碼錯誤的結果不應該讓我登錄,但在我的情況下,如果用戶名正確,密碼錯誤,它允許我登錄到應用程序。如何檢查在PHP登錄?

這裏是我的登錄腳本

<?PHP 
include_once("conn.php"); 

    $user= $_POST['userName']; 
    $password = mysqli_real_escape_string($_POST['password']); 

    $qr="select password from user where userName='$user'"; 
    $res=mysqli_query($con, $qr); 

while($row=mysqli_fetch_array($res)){ 

     $pass=$row[0]; 
     } 

     $saltQuery = "select salt from user where userName = '$user'"; 
     $result = mysqli_query($con , $saltQuery); 

     while($row=mysqli_fetch_array($result)){ 
      $salt = $row[0]; 
     } 
     $saltedPW = $password . $salt; 
     $hashedPW = hash('md5', $saltedPW); 



    if($pass==$hashedPW){ 


     $query = "SELECT userName, password FROM user WHERE userName = '$user' AND password = '$hashedPW'"; 

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

     if($result->num_rows > 0){ 
    echo"success login "; 
    } else{ 
      echo"failed login "; 


     } 
+0

您是否在數據庫中爲用戶名設置了主鍵? 它看起來像你有多個記錄使用相同的用戶名和密碼 –

+2

首先,你爲什麼不使用單個查詢來獲取所有的細節而不是3個查詢? –

+0

如果你甚至沒有基本的調試技巧來自己分析這樣的問題,你可能不應該編寫自己的登錄腳本。 – CBroe

回答

0

嘗試做一些事情,爲登錄頁面。

<?php 
    include("config.php"); 

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

    $username = addslashes($username); 
    $password = addslashes($password); 
    $username = mysqli_real_escape_string($link, $username); 
    $password = mysqli_real_escape_string($link, $password); 

    $pass= md5($password); 
    $seladmin ="SELECT id,UserName,Password FROM login WHERE UserName='$username' && Password='$pass'"; 
    $SelRecAdmin = mysqli_query($link,$seladmin); 


    $row = mysqli_fetch_array($SelRecAdmin); 

    $tot_num_row=mysqli_num_rows($SelRecAdmin); 
    if($tot_num_row >0) 
    { 

    $_SESSION['adminid']=$row['id']; 
     $_SESSION['adminunm'] = $row['UserName']; 
     header('location:home.php'); 
     exit; 
    } 
    else 
    { 
    $_SESSION['msg']= 'Invalid username or password'; 
    header('location:index.php'); 
    exit; 
    } 
    } 

    ?> 
0

我爲您的問題開發了一個解決方案。我沒有運行它,如果你有任何語法錯誤,請親自修復它。

**請確保您的代碼中沒有相同的用戶名,否則,如果輸入了錯誤的密碼,它將顯示成功消息。 (根據你的代碼)。

但是,即使您有多個具有相同用戶名的條目,下面的代碼也會給出預期的結果。 **

<?PHP 
include_once("conn.php"); 

    $user= $_POST['userName']; 
    $password = mysqli_real_escape_string($_POST['password']); 
    $password = hashIt($password,$user); 

    $res=mysqli_query($con,"select * from user where userName='".$user."' AND password='".$password."'"); 
    if(mysqli_num_rows($res) == 1){ 
     echo "Login Successfull"; 
    }else{ 
     echo "Invalid Username/Password"; 
    } 


function hashIt($password,$user){ 
    $result = mysqli_query($con,"select salt from user where userName = '".$user."'"); 
    // No need to check other things, if query fails/no records found anyway it'll show login failure message. 
    while($row=mysqli_fetch_array($result)){ 
      $salt = $row['salt']; 
    } 

    $saltedPW = $password . $salt; 
    return hash('md5', $saltedPW); 
} 

?>