2010-06-28 93 views
0

我的會員腳本正在工作,但這一個文件除外。當我在登錄表單中輸入用戶名和密碼時,check.php會給我提示「請輸入所有信息」。登錄表單上的唯一信息是用戶名和密碼。登錄表格的行爲張貼在check.php一個php文件不能在會員腳本中工作

我需要這個腳本來檢查我的數據庫中的用戶名和md5加密密碼並重定向到成員區域。我使用隨機密碼。這是唯一的問題。這是check.php腳本。請讓我知道我需要做些什麼才能工作。我從別人那裏得到了這個腳本,他們也不知道如何解決它。我不知道PHP。只是想複製和粘貼。謝謝

============================ 

<? 
/* Check Username Script */ 
session_start(); // Start Session 

include 'database.php'; 
// Conver to simple variables 
$username = $_POST['username']; 
$password = $_POST['password']; 

if((!$username) || (!$password)){ 
    echo "Please enter ALL of the information! <br />"; 
    include 'login_form.html'; 
    exit(); 
} 

// Convert password to md5 hash 
$password = md5($password); 

// check if the user info validates the db 
$sql = mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password' AND activated='1'"); 
$login_check = mysql_num_rows($sql); 

if($login_check > 0){ 
    while($row = mysql_fetch_array($sql)){ 
    foreach($row AS $key => $val){ 
     $$key = stripslashes($val); 
    } 
     // Register some session variables! 
     session_register('first_name'); 
     $_SESSION['first_name'] = $first_name; 
     session_register('last_name'); 
     $_SESSION['last_name'] = $last_name; 
     session_register('email_address'); 
     $_SESSION['email_address'] = $email_address; 
     session_register('special_user'); 
     $_SESSION['user_level'] = $user_level; 

     mysql_query("UPDATE users SET last_login=now() WHERE userid='$userid'"); 

     header("Location: members.php"); 
    } 
} else { 
    echo "You could not be logged in! Either the username and password do not match or you have not validated your membership!<br /> 
    Please try again!<br />"; 
    include 'login_form.html'; 
} 
?> 

這是我可以在這裏複製的腳本的唯一部分。我正在使用會話。操作是POST。

+0

究竟是什麼問題,不工作是小鬼?沒有任何PHP警告/錯誤? 這是很難看到如此無格式如上所述。 – Redlab 2010-06-28 15:02:31

+0

如何發佈login_form.html?與表單操作相反,「username」/ post變量是「POSTED」還是「GET」? – bpeterson76 2010-06-28 15:17:46

回答

1

聽起來像一個錯字,無論是當你設置$ username $密碼變量,或者在你的表單中。檢查表單上的名稱是否正確::)

另外,最好使用isset($ username)而不是!$ username。不要發出警告:)

0

請發佈login_form.html的內容。我猜這個表單是使用GET而不是POST,或者輸入字段沒有被命名爲「username」和「password」。

別的東西:此代碼包含了一個非常嚴重的安全問題:

$username = $_POST['username'] 
mysql_query("SELECT * FROM users WHERE username='$username' AND password='$password' AND activated='1'"); 

這意味着攻擊者可以操縱SQL語句。例如用戶名:

admin'-- 

將導致該SQL查詢:

SELECT * FROM users WHERE username='admin'--' AND password='egal' AND activated='1' 

這意味着:

SELECT * FROM users WHERE username='admin' 

如果一個用戶名爲將授予訪問權限爲 「admin」 的存在,忽視密碼。

注意:過濾 - 不會有幫助,因爲有很多其他方法可以讓您獲得樂趣。您需要使用mysql_real_escape_string($ username)來轉義輸入中的特殊字符。更多信息可在http://php.net/manual/en/function.mysql-real-escape-string.php

1

在您的表單中,確保要求輸入用戶名和密碼的輸入字段具有與其相關的正確名稱。

例如:

<input type='text' name='username'> 
<input type='password' name='password'> 

name=後的值是什麼被作爲變量名通過。爲了證明,輸入字段:

<input type='text' name='thisIsMyName'> 

將在PHP腳本中顯示爲:

$_POST['thisIsMyName']; 

如果您發佈被提交表單的HTML,我們可以給你更多細節在上面。