2014-01-23 370 views
0

道歉我知道這將是一個很簡單的答案,但尋找答案我認爲它讓我感到困惑的不僅僅是問這個問題,因爲有太多這樣的問題,令人困惑或者有時候相互矛盾的答案。PHP/MySQLi /登錄腳本

我的登錄腳本正在連接到數據庫,提交$ POST usr/pass得到正確的響應。

我現在需要使用這些結果來驗證用戶。所以..以前我會用mysql_num_rows來計算數據庫響應,如果是1則認證。但是我很欣賞mysql_num_rows被貶損,我發現另一篇文章說這也是一種現在做事情的弱方法,應該避免。

那我該用什麼呢?

<form id='login' action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method='post' accept-charset='UTF-8'> 
     <fieldset > 
     <legend>Login</legend> 
     <input type='hidden' name='submitted' id='submitted' value='1'/> 

     <label for='username' >UserName*:</label> 
     <input type='text' name='username' id='username' value="" maxlength="50" /> 

     <BR /> 

     <label for='password' >Password*:</label> 
     <input type='password' name='password' id='password' value="" maxlength="50" /> 
     <BR /> 
     <input type='submit' name='Submit' value='Submit' /> 

     </fieldset> 
</form> 

<?php 

if(isset($_POST['submitted'])) 
{ 
    $postname = $_POST['username']; 
    $postpass = $_POST['password']; 
    $postpassMD5 = md5 ($postpass); 

    $query = $dbcnx->query("SELECT uid, username, password, ulevel FROM members WHERE  username = '$postname' AND password = '$postpassMD5' "); 
    $result = $query->fetch_object(); 

    $dbcnx->close(); 

} 
?> 
+0

哦,即時通訊也知道,MD5是弱,將改變這一點。 – ablueman

+0

@aneesh http://security.stackexchange.com/questions/19906/is-md5-considered-insecure –

+0

嗨使用mysql真正的轉義字符串來執行查詢之前檢查用戶的用戶名和密碼。 –

回答

2

嘗試計算你的結果數組。

if(count($result) > 0) 
{ 
    // your code 
} 
+0

這看起來不錯,會測試..... – ablueman

+0

這工程,如果你添加美元$結果 – ablueman

+0

對不起typo haha​​h – KBeckers

2

你也可以做到這一點從MySQL注射保護:

$username = stripslashes($username); 
$password = stripslashes($password); 
$username = mysql_real_escape_string($username); 
$password = mysql_real_escape_string($password); 

還要檢查

$count = mysql_num_rows($result); 
if($count==1) 
    { 
     session_start(); 
     session_register('user_id'); 
     header("location:user_page.php"); // put your mugallym page name here 
    } 
+1

mysql_real_escape_string已被棄用,並且OP已經標記了mysqli,所以我建議你改爲'$ username = $ mysqli-> real_escape_string($ username);'[reference](http://us2.php.net/mysqli_real_escape_string) –

+0

那些擴展名已棄用,並會很快刪除。而不是使用準備好的語句,** PDO **或** mysqli **。還可以使用** PHP過濾器清理**來代替舊的,不健康的擴展,如@candle狀態。 – datelligence

+0

謝謝我欣賞的答案,但如前所述,現在大部分已折舊。不過謝謝。 – ablueman