使用错误密码登录PHP仍然有效
我用PHP和MySQL数据库创建了一个登录页面。一切正常,但当我使用正确的用户名和错误的密码登录时,它仍然会将我发送到登录页面,并且不会将我保留在登录页面上使用错误密码登录PHP仍然有效,php,mysql,Php,Mysql,我用PHP和MySQL数据库创建了一个登录页面。一切正常,但当我使用正确的用户名和错误的密码登录时,它仍然会将我发送到登录页面,并且不会将我保留在登录页面上 <?php $user = $_POST['user']; $pass = stripslashes($_POST['pass']); $pass = mysql_real_escape_string($pass); $pass = md5($pass); $connect = mysql_connect("$host", "$ad
<?php
$user = $_POST['user'];
$pass = stripslashes($_POST['pass']);
$pass = mysql_real_escape_string($pass);
$pass = md5($pass);
$connect = mysql_connect("$host", "$ad_user", "$ad_pass") or die("Unable to connect to MySQL");
$db = mysql_select_db("$db", $connect) or die("Could not select examples");
$query = "SELECT * FROM members WHERE username='$user'" or die("error query");
$result = mysql_query($query);
$count = mysql_num_rows($result);
$p = mysql_fetch_array($result);
If($count == 1){
If($p['password'] == $pass){
session_start();
$_SESSION['loggedin'] = 1;
$_SESSION['username'] = $user;
header('Location: //members.polydodo.com');
}else{
header('Location: ../login.php?error');
}
}else{
header('Location: ../login.php?error');
}
mysql_close($connect);
?>
也使用密码字段
$query = "SELECT * FROM members WHERE username='$user' AND password='$pass'" or die("error query");
$result = mysql_query($query);
$count = mysql_num_rows($result);
//$p = mysql_fetch_array($result);
if($count == 1){
session_start();
$_SESSION['loggedin'] = 1;
$_SESSION['username'] = $user;
header('Location: //members.polydodo.com');
}else{
header('Location: ../login.php?error');
}
尝试在查询中传递这两个值。您不需要在使用密码字段后匹配它
$query = "SELECT * FROM members WHERE username='$user' AND password='$pass'" or die("error query");
$result = mysql_query($query);
$count = mysql_num_rows($result);
//$p = mysql_fetch_array($result);
if($count == 1){
session_start();
$_SESSION['loggedin'] = 1;
$_SESSION['username'] = $user;
header('Location: //members.polydodo.com');
}else{
header('Location: ../login.php?error');
}
尝试在查询中传递这两个值。您不需要在问题在下线后匹配它
$query = "SELECT * FROM members WHERE username='$user'" or die("error query");
$result = mysql_query($query);
换成
$query = "SELECT * FROM members WHERE username='$user' LIMIT 1";
$result = mysql_query($query) or die(mysql_error());
更新:
还可以在查询中直接使用密码进行身份验证,如
$query = "SELECT * FROM members WHERE username='$user' AND password='$pass' LIMIT 1";
$result = mysql_query($query) or die(mysql_error());
注意:mysql.*
不推荐使用mysqli.*
或PDO
问题在下面一行
$query = "SELECT * FROM members WHERE username='$user'" or die("error query");
$result = mysql_query($query);
换成
$query = "SELECT * FROM members WHERE username='$user' LIMIT 1";
$result = mysql_query($query) or die(mysql_error());
更新:
还可以在查询中直接使用密码进行身份验证,如
$query = "SELECT * FROM members WHERE username='$user' AND password='$pass' LIMIT 1";
$result = mysql_query($query) or die(mysql_error());
注意:mysql.*
不推荐使用mysqli.*
或PDO
首先,请停止使用mysql并切换到mysqli | | PDO。阅读说明,MySQLi函数/方法几乎与MySQL相同,我打赌对于大多数php脚本,您可以只运行一个Find+Replace for MySQL\uo到MySQLi\uo,但OOB还是更好。其次,请停止对SHA512或其他更好的散列类型使用MD5,并查看密码盐析。您的代码容易受到SQL注入的攻击!因此,不要再找借口说没有时间去研究一些可以防止代码中基本漏洞的东西了。那么你允许用户名重复了吗?首先,请停止使用MySQL并切换到MySQLi | | PDO。阅读说明,MySQLi函数/方法几乎与MySQL相同,我打赌对于大多数php脚本,您可以只运行一个Find+Replace for MySQL\uo到MySQLi\uo,但OOB还是更好。其次,请停止对SHA512或其他更好的散列类型使用MD5,并查看密码盐析。您的代码容易受到SQL注入的攻击!因此,不要再找借口说没有时间去研究一些可以防止代码中基本漏洞的东西了。那么你允许用户名重复了吗?我一开始就试过了,但它不起作用。我在数据库中使用用户名作为主键这一事实与此有关吗?我已经更新了我的答案。尝试使用该代码。用户名必须是唯一的,如果你想你张贴的代码是什么,我一开始无法得到工作之前,使它有点复杂。此外,username列被设置为unique以避免重复,目前只有一行。@rmalex您应该创建一个user_id作为主键和唯一键。看到这个@rmalex,这就是为什么你应该放弃mysql.*
API。你把代码搞砸了,这在PDO和预处理语句中是不可能的。我一开始就试过了,但它不起作用。我在数据库中使用用户名作为主键这一事实与此有关吗?我已经更新了我的答案。尝试使用该代码。用户名必须是唯一的,如果你想你张贴的代码是什么,我一开始无法得到工作之前,使它有点复杂。此外,username列被设置为unique以避免重复,目前只有一行。@rmalex您应该创建一个user_id作为主键和唯一键。看到这个@rmalex,这就是为什么你应该放弃mysql.*
API。你把你的代码搞砸了,用PDO和准备好的语句是不可能的。