初学者帮助:PHP MySQL(PDO)函数

麦克风

我正在尝试学习PHP并设置基于用户访问权限的网站。我终于找到了一个模板,该模板大多易于使用和实现。但是,经过数小时的努力来修改模板之后,我不得不恳请帮助。

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

我敢肯定有一个简单的方法,但是无论我如何更改,我都会收到错误消息,而且我似乎根本还不了解语法。

<?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['username'] = $row['username'];

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

另外,您还可以扩展查询,以允许用户通过添加电子邮件或用户名登录。

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

如果您要这样做,则ID建议将:email持有人更改为更明智的内容:user,以使阅读代码更有意义。

编辑

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

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()用来比较数据库中加密密码的用户密码

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PHP PDO-对初学者的了解

来自分类Dev

Postgresql VARADIC函数,需要帮助(初学者)

来自分类Dev

初学者的python函数

来自分类Dev

初学者的python函数

来自分类Dev

构造函数 <初学者>

来自分类Dev

初学者的mysql语法

来自分类Dev

函数[初学者]中的Python错误

来自分类Dev

初学者Sql Sum函数

来自分类Dev

初学者MySQL语法错误

来自分类Dev

C#MySQL初学者问题

来自分类Dev

初学者:从表和数据库PHP / HTML / MySQL中删除行

来自分类Dev

R:初学者问题:函数上的递归函数

来自分类Dev

函数式编程初学者:用Java编写库

来自分类Dev

Java初学者对构造函数的使用感到困惑

来自分类Dev

使用switch case语句初学者javascript编写函数

来自分类Dev

初学者java构造函数+循环+表ArrayIndexOutOfBounds

来自分类Dev

初学者Java应用程序构造函数问题

来自分类Dev

javaScript,函数,赞我的名字(初学者)

来自分类Dev

如何在 C 中使用函数(初学者)

来自分类Dev

MySQL中的初学者While循环错误

来自分类Dev

MySQL初学者-如何解析字符串

来自分类Dev

PHP / SQL初学者

来自分类Dev

(Python初学者的帮助)getch?

来自分类Dev

CUDA代码性能的初学者帮助

来自分类Dev

Android的数据绑定帮助初学者

来自分类Dev

需要帮助的初学者 sql 学生

来自分类Dev

初学者C ++,构造函数中的“无匹配函数调用”

来自分类Dev

(C ++初学者)如何将这些类函数调用为主函数?

来自分类Dev

php Preg_match初学者