2012-07-20 55 views
0

這是用於登錄系統的。當我希望用戶登錄時,我希望它獲得給定的密碼並將其與給定行的「密碼」列進行比較......在這種情況下,$usernameinput但我使用的方法不起作用。有什麼建議麼?在sql中選擇特定單元

<?php 

$usernameinput = $_POST["uname"]; 
$passwordinput = $_POST["pass"]; 

if (empty($usernameinput)) 
{ 
echo ""; 
} 

else 
{ 

$con = mysql_connect("localhost","STUFFFFF","STUFFFFFF"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

這裏是它選擇

mysql_select_db("STUFFFFF", $con); 

$login = mysql_query("SELECT * FROM Users 
WHERE Username='$usernameinput'"); 


while($row = mysql_fetch_array($result)) 
    { 
    $matchpassword = $row['Password']; 
    } 
} 

if (empty($passwordinput)) 
{ 
echo ""; 
} 
else 
{ 

if ("$passwordinput"=="$matchpassword") 
{ 
$sqlusername = $usernameinput; 
echo "You were logged in successfully, now you can visit the site as $sqlusername. <br />"; 
} 
else 
{ 
echo "You have entered an incorrect password."; 
} 

} 
?> 

<form action="login.php" method="post"> 
Username: <input type="text" name="uname" /> <br /> 
Password: <input type="password" name="pass" /> <br /> 
<input value="Login" type="submit" /> 
</form> 
+0

你應該知道SQL注入:其中username =「$ usernameinput」?」 – 2012-07-20 21:38:07

+0

我怎麼能防止 – 2012-07-20 21:38:55

+0

點擊此處去掉多餘QUOT的:‘$ passwordinput’==‘$ matchpassword’ – 2012-07-20 21:39:08

回答

1
$sql = mysql_query('SELECT password FROM users WHERE username="'.mysql_real_escape_string($_POST['username']).'"'; 
$user = mysql_fetch_assoc($sql); 
if ($user['password'] == sha1($_POST['password'])) { 
    //Logged in 
} else { 
    //Wrong password 
} 

這樣可以防止MySQL的注射和您的用戶密碼是安全的。

+0

如果這項工作,它會很好。我要去測試它:) – 2012-07-20 22:03:38

+0

@SpencerMay:當然,你需要用你的名字替換列名,並且可能將密碼保存爲sha1格式..或者乾脆放棄支票的這一部分,這取決於你。(我更新了代碼) – 2012-07-20 22:05:27

+0

我將如何以sha1格式保存? – 2012-07-20 22:06:41

2

您應該使用mysql_fetch_assoc按名稱來查詢結果集列。

+0

我試過這...仍然沒有工作,我甚至不知道什麼^函數確實大聲笑 – 2012-07-20 21:42:28

+1

它通常有助於運行print_r($ row)或var)_dump($ data)你從數據庫中取回來確保你正在處理你的想法。 – databyss 2012-07-20 21:44:59

1

爲什麼不把你的密碼參數添加到你的SQL語句中。

其中username = ' 「$ usernameinput。」' 和密碼= ' 「$ passwordinput。」'

然後測試是否有任何結果。

另外需要注意的是,出於安全和隱私的原因,您應該始終對數據庫中的密碼進行加密。研究一下。另外,你應該使用mysqli函數,而不是mysql的函數,因爲它們的增強保護。

很抱歉的格式,我使用的是手機=/

關閉我的頭頂,它會像:

$行= mysqli_num_rows($結果);

如果($行< 1){// 沒有用戶名發現,錯誤的PW } 其他{// 用戶名和PW比賽 }

+0

這聽起來像它會起作用,我會考慮保護它,但首先我需要讓它工作大聲笑。我會把這個變成if語句還是什麼? – 2012-07-20 21:58:41

+0

我可以補充一點,我對sql很陌生,一直在努力弄清楚自己的頭腦。我已經完成了註冊頁面,所有剩下的就是這個。 – 2012-07-20 22:02:07

+0

@SpencerMay可以回到電腦。運氣好的話? – 2012-07-20 23:09:32