登录尝试将变量传递到登录页面

时间:2015-07-26 18:28:30

标签: php mysql pdo

我更改了登录页面以使用PDO。经过研究,我似乎找不到如何传递登录页面中未定义的变量的解决方案。我可以传递用户名并显示它没有任何问题,但无论我尝试什么,memberid和firstname都不会通过。

  1. 我试图传递id和firstname - 显示第一个名字。 id用于定义谁登录,因为数据将使用该用户的现有信息填充数据库。

  2. 有两个数据库,一个有注册信息 - id,firstname,lastname,password .....
    第二个数据库将填充检查信息,并将与注册数据库<再次这样它就知道谁参加了考试。

  3. 以下代码我试图传递登陆页面减去html所需的变量。

    的login.php
           

        require_once('inc/config.php');
    
        //check if already logged in move to home page
        if( $user->is_logged_in() ){ header('Location: members.php'); } 
    
        //process login form if submitted
        if(isset($_POST['submit'])){
            $memberID = $_POST['memberID'];
            $firstname= $_POST['firstname'];
            $email = $_POST['email'];
            $password = $_POST['password'];
    
            if($user->login($email,$password)){ 
                $_SESSION['email'] = $email;
                $_SESSION['memberID'] = $memberID;
                $_SESSION['firstname'] = $firstname;
                header('Location: members.php');
                exit;
    
            } else {
                $error[] = 'Wrong email or password.';
            }
    
        }
    
       ?>
    

    USER.php 这是我添加了memberid和firstname但没有传递的地方。

    <?php
    include('password.php');
    class User extends Password{
    
        private $_db;
    
        function __construct($db){
            parent::__construct();
    
            $this->_db = $db;
        }
    
        private function get_user_hash($username){  
    
            try {
                $stmt = $this->_db->prepare('SELECT memberID, firstname, password FROM members WHERE username = :username AND active="Yes WHERE memberID = :memberID AND firstname = :firstname LIMIT 1" ');
    
    
                $stmt->execute(array('memberID' => $memberID));
                $stmt->execute(array('firstname' => $firstname));
                $stmt->execute(array('username' => $username));
    
                $row = $stmt->fetch();
                return $row['password'];
    
            } catch(PDOException $e) {
                echo '<p class="bg-danger">'.$e->getMessage().'</p>';
            }
        }
    
        public function login($username,$password){
    
            $hashed = $this->get_user_hash($username);
    
            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;
            }       
        }
    
    }
    
    
    ?>
    

    登陆页面以下是我在目标网页顶部的内容。

    <?php
    session_start();
     $_SESSION['memberID'] = $memberID['memberID'];
     $_SESSION['firstname'] = $firstname['firstname'];
    ?>
    

    这在html中

    <?php echo $_SESSION['memberID']; ?>
    <?php echo $_SESSION['firstname']; ?>
    

    如果有人可以提供帮助那就太棒了。请理解我认为PDO更适合登录,这就是我转换到PDO的原因。我不是天才,我在这里寻求帮助。

    更新

    经过更多测试,它不知道会员是什么,它是未定义的。有人能告诉我如何从user.php中的db定义和获取它吗?这将解决问题。我无法弄清楚如何使用已经存在的代码来完成它。

1 个答案:

答案 0 :(得分:-1)

我看到的第一件事是你没有将它们传递到get_user_hash,这意味着它们不会存在于scope函数中,即使它们具有相同的名称