php
  • passwords
  • username
  • 2012-10-01 297 views -2 likes 
    -2

    我有我的數據庫信息...用戶名和密碼驗證在PHP

    用戶名 - 錦,MAV,脛

    密碼 - 錦,MAV,脛

    這是我的代碼。 ..

    <?php 
    
    $con=mysql_connect("localhost","root",""); 
    mysql_select_db("nnx",$con); 
    $tbl2=mysql_query("SELECT * FROM tablename WHERE `username` = 
    '".mysql_real_escape_string($_POST['username'])."' and `password` = 
    '".mysql_real_escape_string($_POST['password'])."'"); 
    
    while($row=mysql_fetch_array($tbl2)) 
    
        if (($row['username']==$_POST['username'])&&($row['password']==$_POST['password'])) 
         { 
          echo " "; 
        } 
    
        if (($row['username']!=$_POST['username'])&&($row['password']!=$_POST['password'])) 
         { 
          header("location: /login.php?codeError=1"); 
          die; 
         } 
    ?> 
    

    的問題是,如果我輸入用戶名「MAV」,密碼爲「鑑」,它仍然要經過的下一個頁面。我該怎麼辦?

    回答

    0

    只是一個建議,但爲什麼不試試這樣說:爲什麼你需要兩個if語句在這裏,它只是布爾,結果要麼是真或假

    if (($row['username']==$_POST['username'])&&($row['password']==$_POST['password'])) 
        { 
         echo " "; 
        }else{ 
         header("location: /login.php?codeError=1"); 
         die; 
        } 
    

    我不明白。

    希望這有助於:)!

    +0

    我試過了,但它只做同樣的事情。但事情是,我的數據庫有3行由用戶名和密碼組成。用戶名mav有一個密碼mav。用戶名kam有密碼kam。用戶名shin有一個密碼shin。問題是,如果我輸入用戶名「mav」並且密碼是「kam」,而不是打印錯誤信息,它仍然會通過頁面。 –

    2

    你應該只檢查是否查詢返回mysql_num_rows()任何行:

    $con=mysql_connect("localhost","root",""); 
    mysql_select_db("nnx",$con); 
    
    $tbl2 = mysql_query("SELECT `username`, `password` FROM `tablename` WHERE 
            `username` = '".mysql_real_escape_string($_POST['username'])."' AND 
            `password` = '".mysql_real_escape_string($_POST['password'])."' 
            "); 
    
    $rows = mysql_num_rows($tbl2); 
    
    if($rows){ 
        // user and password exists in db 
    } else { 
        // does not exist 
        header("location: /login.php?codeError=1"); 
        die; 
    } 
    

    就像我告訴你前面的問題,嘗試從mysql_*功能移動。

    +0

    使用mysql_fetch_array的OP while語句應該可以完成這項工作(檢查是否存在具有給定用戶名和密碼的記錄),我認爲這已經沒有行計數了。 –

    0

    您正在查詢中已經檢查驗證。如果用戶正確輸入用戶名和密碼,那麼查詢將返回一行,其中包含該數據。

    所以你只需要計算你的查詢返回的行數。如果低於1,則該用戶未通過身份驗證

    0

    嘗試

    if (($row['username']==$_POST['username'])&&($row['password']==$_POST['password'])) 
         { 
          echo " "; 
        } 
    
    else 
         { 
          header("location: /login.php?codeError=1"); 
          die(); 
         } 
    

    反正,一個很好的辦法來解決這樣的問題,就是在屏幕上臨時打印的變量(如調試)。

    echo $row['username']." ".$_POST['username']." ".$row['password']." ".$_POST['password'] 
    

    查看變量是否實際存在,如果您的數據庫查詢或發佈數據的表單存在問題。

    相關問題