2012-07-20 46 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