调用成员函数..在字符串上,如何克服此错误

时间:2019-02-28 17:52:03

标签: php

创建一个登录页面,如果用户已经登录,则将他们重定向到主页,但是在执行时,我得到错误代码:

  

在字符串上调用成员函数isloggiedin()

我在做什么错了?

<?php
include "H:\p3t\phpappfolder\public_php\FYP\includes\api\config\database.php";


if(User::is_loggedin()!="") 
{
    $user->redirect('home.php');
}

if(isset($_POST['btn-login'])) // line  11 where new error exists
{
    $user = $_POST['username'];
    $password = $_POST['password'];

    if(User::login($user,$password))
    {
        $user->redirect('home.php');
    }
    else
    {
        $error = "Wrong Details !";
    }
}
?>

以下代码也可能有帮助,因为它是我的class.user.php文件:

<?php
class USER
{
    private $db;

    function __construct($DB_con)
    {
        $this->db = $DB_con;
    }



    public function login($user,$password)
    {
        try
        {
            $stmt = $this->db->prepare("SELECT * FROM user WHERE user_name=:username OR user_email=:password LIMIT 1");
            $stmt->execute(array(':username'=>$user, $password));
            $userRow=$stmt->fetch(PDO::FETCH_ASSOC);
            if($stmt->rowCount() > 0)
            {
                if(password_verify($password, $userRow['user_pass']))
                {
                    $_SESSION['user_session'] = $userRow['user_id'];
                    return true;
                }
                else
                {
                    return false;
                }
            }
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }
    }

    public function is_loggedin()
    {
        if(isset($_SESSION['user_session']))
        {
            return true;
        }
    }

    public function redirect($url)
    {
        header("Location: $url");
    }

    public function logout()
    {
        session_destroy();
        unset($_SESSION['user_session']);
        return true;
    }
}
?>

如您所见,我具有函数“ isloggedin”,所以我不明白为什么会收到错误消息

遵循答案中的建议后,出现错误消息:

  

解析错误:语法错误,第11行的H:\ p3t \ phpappfolder \ public_php \ FYP \ includes \ api \ login.php中出现意外的'if'(T_IF)

1 个答案:

答案 0 :(得分:0)

User是字符串参数,而不是$user->is_loggedin()对象,因此不能使用is_loggedin()

public static function is_loggedin() { return isset($_SESSION['user_session']); } 方法不使用任何类属性,因此可以是静态方法。

if (User::is_loggedin())

然后您就可以使用

$user

此外,您不应该在

之前设置$passwordif (isset($_POST['btn-login']))
{{1}}