2012-10-04 168 views
0

我不知道爲什麼這個PHP登錄腳本不起作用。當我嘗試登錄時,它總是返回:「Ongeldig wachtwoord/gebruikersnaam!」。此登錄腳本有什麼問題?

這是腳本:

session_start(); 
include('connect.php'); 

// functie voor random key 
function make_rand($length) { 
    $chars = "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ1234567890"; 
    $rand = ''; 
    for ($i = 1; $i <= $length; $i++) { 
    $num = rand(0, strlen($chars)); 
    $rand .= substr($chars, $num, 1); 
    } 
return $rand; 
    } 

該函數創建一個隨機密鑰爲SESSION_ID使用。

// kijk of formulier is verzonden 
if ($_SERVER['REQUEST_METHOD'] == "POST") {  // indien verzonden 
    $query= mysql_query("SELECT * FROM customers WHERE name = '" .$_POST['inlognaam'] . "'"); 

服務器會檢查用戶名存在..

if (mysql_num_rows($query) > 0) { // als er een gebruiker is gevonden 
    $user = mysql_fetch_object($query); 
    if ($user->password == isset($_POST['password'])) { 
     $_SESSION['user_id'] = $user->name; 
     $rand_key = make_rand(50); // maak een random string voor sessie session_id mbv van functie 
     $_SESSION['session_id'] = $rand_key; 
     // zet de sessie id in de db zodat we hem later kunnen controleren 
     mysql_query("UPDATE customers SET session_id = '" . $rand_key . "' WHERE name = '" . $_SESSION['inlognaam'] . "'"); 
    $_SESSION['user_ip'] = $_SERVER['REMOTE_ADRESS']; 
    echo 'Inloggen is gelukt!'; 
    } 

當用戶存在,服務器將創建一個SESSION_ID,節省了用戶的IP地址在user_ip,它也節省了用戶名(USER_ID)

else { // ongeldig wachtwoord 
    echo 'Ongeldig wachtwoord/gebruikersnaam!'; 
    } 
} else { // ongeldige gebruikersnaam 
echo 'Ongeldig wachtwoord/gebruikersnaam!'; 
} 
    } 

如果用戶不存在回聲的:Ongeldig gebruikersnaam/wachtwoord」(無效的用戶名/密碼)

else { 
    echo '<table id="loginbox">'; 
    echo '<tr><td><b>Login:</b></td></tr>'; 
    echo '<form action="test.php" method=\"post\">'; 
    echo '<tr><td>Gebruikersnaam:</td></tr><tr><td> &nbsp;<input style="width:120;" name="inlognaam" type="text" id="inlognaam"> </td></tr>'; 
    echo '<tr><td>Wachtwoord:</td></tr><tr><td> &nbsp;<input type="password" style="width:120;" name="password id="password"> </td></tr>'; 
    echo '<tr><td><input type="submit" name="Submit" value="Login"></td></tr>'; 
    echo '</table>'; 
} 

這是登錄表單。

編輯:我只注意到它甚至不使用PHP腳本,它只是寫入輸入URL的內容..

例:

localhost/School/test.php?inlognaam=Thomas&password=british9&Submit=Login 
+0

什麼是你生成的SQL查詢看起來像?它在數據庫中運行時是否工作? – andrewsi

+0

生成的SQL應該變成這樣:''SELECT * FROM customers WHERE name ='Thomas''' – Thakkennes

+1

當一個叫做'Thomas O'Connor'的客戶出現時會發生什麼? – andrewsi

回答

3

可能問題就在這裏:

if ($user->password == isset($_POST['password'])) 

快速修復:

if ($user->password == $_POST['password']) 

isset返回一個布爾值,告訴數組項是否設置,而不是項目的值。

此外,在您的形式,它說

name="password 

這應該是:

name="password" 

除此之外,還有一些更談談您的代碼:

  1. 待辦事項直接在SQL查詢中不使用$_POST[]總是轉義它。
  2. 使用array_key_exists來檢查$_POST中是否存在某個密鑰。 isset()將產生警告。
  3. 會話具有唯一的ID,不需要產生像這樣(這是由方式不能保證是唯一的,檢查出的UUID更好的唯一ID)
+0

這樣可以阻止它給出「用戶不存在」的錯誤,但它仍然不會回顯「你已經彎曲了ingelogd」。它似乎刷新頁面,就是這樣.. – Thakkennes

+0

你的表單也被打破。它錯過了「後的密碼字段名稱 –

+0

是的,但這並不是什麼阻止它的工作.. – Thakkennes

0

當你檢查你是比較密碼與isset的真或假返回值的用戶密碼值

0

你從未$_SESSION['inlognaam'],所以試圖取代:

mysql_query("UPDATE customers SET session_id = '" . $rand_key . "' WHERE name = '" . $_SESSION['inlognaam'] . "'"); 

有了:

mysql_query("UPDATE customers SET session_id = '" . $rand_key . "' WHERE name = '" . $_POST['inlognaam'] . "'"); 

編輯:

$_SESSION['inlognaam'] = $_POST['inlognaam']; 
mysql_query("UPDATE customers SET session_id = '" . $rand_key . "' WHERE name = '" . $_SESSION['inlognaam'] . "'"); 

編輯2: 要調試,我會盡量簡化代碼:查詢之前 或者設置$_SESSION['inlognaam']

<?php 
include('connect.php'); 

// kijk of formulier is verzonden 
if ($_SERVER['REQUEST_METHOD'] == "POST") { 
    // indien verzonden 
    $query= mysql_query("SELECT * FROM customers WHERE name = '" .$_POST['inlognaam'] . "'"); 
    if (mysql_num_rows($query) > 0) { 
     // als er een gebruiker is gevonden 
     $user = mysql_fetch_object($query); 
     if ($user->password == $_POST['password']) { 
      echo 'Inloggen is gelukt!'; 
     } else { 
      // ongeldig wachtwoord 
      echo 'Ongeldig wachtwoord/gebruikersnaam!'; 
     } 
    } else { 
     // ongeldige gebruikersnaam 
     echo 'Ongeldig wachtwoord/gebruikersnaam!'; 
    } 
}else { 
?> 
<form action="test.php" method="post"> 
    <table id="loginbox"> 
     <tr><td><b>Login:</b></td></tr> 
     <tr><td>Gebruikersnaam:</td></tr> 
     <tr><td> &nbsp;<input type="text" style="width:120;" name="inlognaam" id="inlognaam"> </td></tr> 
     <tr><td>Wachtwoord:</td></tr> 
     <tr><td> &nbsp;<input type="password" style="width:120;" name="password" id="password"> </td></tr> 
     <tr><td><input type="submit" name="Submit" value="Login"></td></tr> 
    </table> 
</form> 
<?php 
} 
?>