您可以使用mysql_num_rows()
并结合您的查询 - 见脚注
if(isset($_POST["name"], $_POST["password"]))
{
$name = $_POST["name"];
$password = $_POST["password"];
$result1 = mysql_query("SELECT username, password FROM Users WHERE username = '".$name."' AND password = '".$password."'");
if(mysql_num_rows($result1) > 0)
{
$_SESSION["logged_in"] = true;
$_SESSION["naam"] = $name;
}
else
{
echo 'The username or password are incorrect!';
}
}
为了使您的本次代码有点更安全,使用:
$name = stripslashes($_POST["name"]);
$name = mysql_real_escape_string($_POST["name"]);
$password = stripslashes$_POST["password"]);
$password = mysql_real_escape_string$_POST["password"]);
但不要看下面的链接关于使用预处理语句和密码散列。
脚注:
你现在的代码是开放的SQL injection。使用prepared statements或PDO with prepared statements。访问这些链接了解更多信息。
我注意到你可能以纯文本格式存储密码。如果是这样的话,它是非常不鼓励的。
如果你是,这是一个现场网站,你最终会被黑客入侵。
我建议你用CRYPT_BLOWFISH或者PHP5.5的password_hash()
函数。对于PHP < 5.5使用password_hash() compatibility pack
。
mysql_*
功能已取消通知:
http://www.php.net/manual/en/intro.mysql.php
这个扩展不赞成PHP 5.5.0,并且不建议用于编写新的代码,因为它会在将来被移除。应该使用mysqli或PDO_MySQL扩展名。请参阅MySQL API Overview以获取进一步帮助,同时选择MySQL API。
这些功能允许您访问MySQL数据库服务器。有关MySQL的更多信息,请参阅»http://www.mysql.com/。
为MySQL
文档可以在»http://dev.mysql.com/doc/找到。
编辑:助阵OP(不考虑我提供有关的链接密码哈希)。
尝试用替换
if(mysql_num_rows($result1) > 0)
{
$_SESSION["logged_in"] = true;
$_SESSION["naam"] = $name;
}
else
{
echo 'The username or password are incorrect!';
}
:
while($row=mysql_fetch_assoc($result1))
{
$check_username=$row['username'];
$check_password=$row['password'];
}
if($username == $check_username && $password == $check_password){
echo "Matches.";
}
else{
echo "No match.";
}
不要忘记清洁你的'$ _POST'变量对MySQL的注射,即'mysql_real_escape_string()' – adamdehaven 2014-10-06 18:35:07
你只需要一个单一的查询'“选择密码从用户的用户名='”。 $名称。 “'”AND password ='“。$ password。”'“'不要忘记SQL注入,如果有任何查询结果 - 用户存在,不要使用'mysql_'扩展名 - 不推荐使用。 'mysqli_'代替 – Cheery 2014-10-06 18:36:17
使用'mysql_num_rows()' - 更好的是,使用预先准备的语句和一个安全的密码散列方法如果使用纯文本密码,你**将被黑客入侵 – 2014-10-06 18:38:34