PHP:无法使用fetch_行登录
我正在学习我的教程。下面是登录的代码,但这不起作用。请帮我把它修好 login.phpPHP:无法使用fetch_行登录,php,database,mysqli,Php,Database,Mysqli,我正在学习我的教程。下面是登录的代码,但这不起作用。请帮我把它修好 login.php $login= login($username, $password); if($login===FALSE){ $errors[]='Username/Password is not correct'; } else{ echo 'Welcome Back!'; } function user_
$login= login($username, $password);
if($login===FALSE){
$errors[]='Username/Password is not correct';
}
else{
echo 'Welcome Back!';
}
function user_id_from_username($username){
global $connect;
$username=sanitize($connect,$username);
$query= "SELECT user_id FROM users WHERE username = '{$username}'";
$result= mysqli_query($connect, $query);
if(!$result){
echo mysqli_error($connect);
}
return mysqli_fetch_row($result);
}
function login($username, $password){
global $connect;
$user_id= user_id_from_username($username);
$username= sanitize($connect, $username);
$password= md5($password);
$query= "SELECT username FROM users WHERE username= '{$username}' and password='{$password}'";
$result= mysqli_query($connect, $query);
if(!$result){
echo mysqli_error($connect);
}
return (mysqli_num_rows($result)>0)?$user_id:FALSE;
}
users.php
$login= login($username, $password);
if($login===FALSE){
$errors[]='Username/Password is not correct';
}
else{
echo 'Welcome Back!';
}
function user_id_from_username($username){
global $connect;
$username=sanitize($connect,$username);
$query= "SELECT user_id FROM users WHERE username = '{$username}'";
$result= mysqli_query($connect, $query);
if(!$result){
echo mysqli_error($connect);
}
return mysqli_fetch_row($result);
}
function login($username, $password){
global $connect;
$user_id= user_id_from_username($username);
$username= sanitize($connect, $username);
$password= md5($password);
$query= "SELECT username FROM users WHERE username= '{$username}' and password='{$password}'";
$result= mysqli_query($connect, $query);
if(!$result){
echo mysqli_error($connect);
}
return (mysqli_num_rows($result)>0)?$user_id:FALSE;
}
此代码总是导致
用户名/密码不正确
。有人能帮我一下吗?这个PHPACADE我的教程太糟糕了,是由一个不称职的书呆子写的仅查询数据库两次就足以说明,更不用说其他故障了。你应该立即退出,并为自己找到可靠的来源
这里是您的函数,但使用的是PDO,而不是mysqli。由于您不是在编写生产代码,而是在学习,所以API更改对您来说并不是什么大不了的事情,但是如果使用得当,PDO要比mysqli简单得多。通过学习PDO准备的语句,您确实将提高您的技能,而不是通过上述“教程”破坏它们。因此,转到PDO
function login($username, $password){
global $connect;
$query = "SELECT user_id, password FROM users WHERE username=?";
$stmt = $connect->prepare($query);
$stmt->execute([$username]);
if ($row = $stmt->fetch() && $row['password'] == md5($password)) {
return $row['user_id'];
}
}
请注意,您应该更改的md5(),相应地更改注册码。除了想知道为什么要查询数据库两次,为什么要使用MySQLi,但仍然在查询中插入值,而不是准备好的语句/绑定变量,以及为什么要使用md5()作为密码的哈希算法?如果它是有效登录名,则返回$user\u id(
return(mysqli\u num\u rows($result)>0)?$user\u id:FALSE;
),但使用严格类型比较(If($login==FALSE){
)对布尔值进行测试先生,正如我在问题中提到的,我正在关注phpacademy lecutres,他们有点老了,我只是想改进我的技术,他们使用我上面提到的方法改进你的技术……这仍然不能解释为什么你要两次查询数据库。对于后来的人,只有一个注释,phpacademy不是由“不完整”完成的tent noob’是我在听4年前录制的讲座,他们也有关于PDO的完整系列,事实上我计划在这一系列讲座之后继续学习,