Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 调用memeber函数。。在字符串上,如何克服此错误_Php - Fatal编程技术网

Php 调用memeber函数。。在字符串上,如何克服此错误

Php 调用memeber函数。。在字符串上,如何克服此错误,php,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['

创建一个登录页面,如果用户已经登录,则会将其重定向到主页,但执行后会收到错误代码:

对字符串调用成员函数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\u php\FYP\includes\api\login.php中出现意外的“if”(T\u if)


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

是loggedin()
方法不使用任何类属性,因此它可以是静态方法

public static function is_loggedin()
{
    return isset($_SESSION['user_session']);
}
然后你可以用

if (User::is_loggedin())
另外,您不应该在之前设置
$user
$password

if (isset($_POST['btn-login']))

$user
显然是一个字符串,而不是用户类的对象或实例。您认为这是如何工作的?在您的方法
login
中,您在
$stmt->execute…
中的代码也需要将密码作为正确的密钥传递-但是您应该学会使用user类,因为它从未在您的代码中实例化过,正如@johncode所说,您为
$\u POST['username']
分配了字符串输出。您不能将
$user
用作用户名的类和变量。谢谢,我能够通过该错误,但是现在我面临一个语法错误,该错误说明如下:如果在第13行(如果(isset($\u POST['btn-login'])),我看不出有任何错误,问题可能在它之前的那一行。在问题中发布准确的错误消息。顺便说一句,单词是“过去”,而不是“通过”。谢谢你的更正,我已经更新了问题,通常意味着你没有在前一行正确终止事情。