gpt4 book ai didi

php - 初学者帮助 : PHP MySQL (PDO) Function

转载 作者:行者123 更新时间:2023-11-29 22:19:33 26 4
gpt4 key购买 nike

我正在尝试学习 PHP 并设置一个基于用户访问的网站。我终于找到了一个使用和实现起来非常简单的模板。然而,经过几个小时的努力修改模板后,我必须请求帮助。

以下代码效果很好,我已经修改了原始模板,以便能够使用电子邮件地址作为用户名和数据库中存储的密码进行登录。原始模板基于用户名登录,而不是使用电子邮件地址。我现在想要实现的是以某种方式还包括来自同一数据库和表的“用户名”字段,并将其存储为 $username 参数以在网站的其他地方使用,例如与“echo”一起使用。我想仍然使用该字段,但用于注册成员(member)的姓名,而不是用于登录的用户名。

我确信有一个简单的方法,但无论我如何更改,我都会不断收到错误消息,而且我似乎还不理解语法。

<?php
include('password.php');
class User extends Password{
private $_db;
function __construct($db){
parent::__construct();

$this->_db = $db;
}
private function get_user_hash($email){
try {
$stmt = $this->_db->prepare('SELECT password FROM members WHERE email = :email AND active="Yes"');
$stmt->execute(array('email' => $email));
$row = $stmt->fetch();
return $row['password'];

} catch(PDOException $e) {
echo '<p class="bg-danger">'.$e->getMessage().'</p>';
}
}

public function login($email,$password){
$hashed = $this->get_user_hash($email);

if($this->password_verify($password,$hashed) == 1){

$_SESSION['loggedin'] = true;
return true;
}
}

public function logout(){
session_destroy();
}
public function is_logged_in(){
if(isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true){
return true;
}
}

}
?>

最佳答案

您只需要稍微扩展您的代码即可。

目前您的查询仅显示 1 个字段,即密码。

SELECT * FROM members WHERE email = :email AND active="Yes"

这将返回整行,而不仅仅是一个字段。

然后您可以提取用户名并将其放入 session 变量中,如下所示:

$_SESSION['username'] = $row['username'];

您可以在网站的其余部分使用它。确保您想要访问 session 变量的所有文件的开头都有 session_start();。如果您想使用其他字段,只需将参数更改为 'firstName''fullName' 或任何字段名称即可。

作为额外的一点,您还可以通过添加此扩展查询以允许用户使用其电子邮件或用户名登录。

SELECT * FROM members WHERE (email = :email OR username = :email) AND active="Yes"

如果您打算这样做,我建议将 :email 持有者更改为更合理的内容,例如 :user ,以便阅读代码更有意义。

编辑

您需要让 get_user_hash() 函数完整返回 $row,然后从那里添加您的 session 变量。它有点从后到前,因为这可能不是我见过的最好的登录脚本。

get_user_hash()中,更改

 return $row['password'];

  return $row;

然后在函数登录中,

public function login($email,$password){
$row = $this->get_user_hash($email);
$hashed = $row['password'];

if($this->password_verify($password,$hashed) == 1){
$_SESSION['username'] = $row['username'];
$_SESSION['loggedin'] = true;
return true;
}
}

实际上,$hashed只不过是password_verify()用来比较数据库中加密密码的用户密码。

关于php - 初学者帮助 : PHP MySQL (PDO) Function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30885783/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com