Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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
使用OOP PHP制作登录屏幕_Php_Oop_Object_Login_Error Handling - Fatal编程技术网

使用OOP PHP制作登录屏幕

使用OOP PHP制作登录屏幕,php,oop,object,login,error-handling,Php,Oop,Object,Login,Error Handling,我是PHP的初学者,我正在尝试使用PHP制作登录屏幕。。。但我总是犯这个错误 (!)致命错误:在C:\wamp\www\photo\u gallery\public\admin\login.php第12行的非对象上调用成员函数login() 这是我的密码: Login.php: <?php require_once("../../includes/database.php"); require_once("../../includes/user.php"); require

我是PHP的初学者,我正在尝试使用PHP制作登录屏幕。。。但我总是犯这个错误

(!)致命错误:在C:\wamp\www\photo\u gallery\public\admin\login.php第12行的非对象上调用成员函数login()

这是我的密码:

Login.php:

<?php
require_once("../../includes/database.php");    
require_once("../../includes/user.php");    
require_once("../../includes/functions.php");
require_once("../../includes/session.php");
?>

<?php
if(isset($_POST["submit"])){
    $obj = User::auth();
    if($obj){
        $session->login($obj);
        redirect_to("index.php");
    } else {
        $message= "USER NOT FOUND.";
    }
    echo '<p id="message">';
    echo output_message($message); 
    echo "</p>";

}
?>

<html>
<head>
    <title>Hello</title>
    <link rel="stylesheet" href="stylesheets/main.css">     
</head>
<body>
    <header id="header">
        <h1>Welcome</h1>
    </header>
    <div id="main">
        <h3>Please Login</h3>
        <form action="login.php" method="post">
            <p><label for="username">Username :</label><input type="text" name="username" placeholder="Username"/></p>
            <p><label for="password">Password :</label><input type="text" name="password" placeholder="Password"/></p>  
            <input type="submit" value="Submit" name="submit" />
        </form>            

    </div>

</body>

你好
欢迎
请登录
用户名:

密码:

session.php

<?php
require_once("database.php");   
require_once("user.php");   
require_once("functions.php");  
?>

<?php   
class Session{
    private $logged = false;
    public $user_id;

    function __construct(){
        session_start();
        if($this->is_logged()){
            redirect_to("index.php");
        } else {
            $message = "Try Again!";
        }
    }

    public function is_logged(){
        return $logged;
    }

    public function login($user){
        if($user){
            $this->user_id = $_SESSION["user_id"] = $user->id ;
            $this->logged = true ;
        }
    }

    public function logout(){
        unset($_SESSION["user_id"]);
        unset($this->user_id);
        redirect_to("login.php");
    }
}

?>

user.php

<?php
require_once("database.php");
require_once("session.php");

class User {

    public $id;
    public $username;
    public $password;
    public $first_name;
    public $last_name;

    public static function find_all(){
        global $db;
        $object = new self;         
        $query = "SELECT * FROM users";
        $result = $db->add_query($query);
        $object = array();
        while($found = $db->fetch_array($result)){
            $object[] = self::resolve_data($found);
        }
        return $object;
    }

    public static function find_by_id($id){
        global $db;
        $object = new self;
        $query = "SELECT * FROM users WHERE id={$id}";
        $result = $db->add_query($query);
        $found = $db->fetch_array($result);
        $object = self::resolve_data($found);
        return $object;
    }

    public static function auth(){
        global $db;
        global $session;
        $username = trim($_POST["username"]);
        $password = trim($_POST["password"]);

        $query = "SELECT * FROM users 
                    WHERE username = '{$username}' AND password = '{$password}' LIMIT                            1";

        $result = $db->add_query($query);
        if($data = $db->fetch_array($result)){
            $obj = self::find_by_id($data["id"]);
            return $obj;
        } else {
            $message="user not found.";
        }
    }

    private static function resolve_data($arr){
       $object = new self;
       $object->id = $arr["id"];
       $object->username = $arr["username"];
       $object->password = $arr["password"];
       $object->first_name = $arr["first_name"];
       $object->last_name = $arr["last_name"];
       return $object;


    }

}



  ?>
您的问题在于:

$session->login($obj);
$session
尚未实例化,因此不是对象(如错误所述)。您需要像这样实例化它:

$session = new Session();
你的问题是:

$session->login($obj);
$session
尚未实例化,因此不是对象(如错误所述)。您需要像这样实例化它:

$session = new Session();

Login.php
中,在您需要类文件之后;添加行:

$session = new Session;

获取类的实例。

Login.php
中,在您需要类文件之后;添加行:

$session = new Session;

获取类的实例。

您缺少
$session

发现

把这个放在后面

$session = new Session();

您缺少
$session

发现

把这个放在后面

$session = new Session();

你有那个错误的行号吗?啊,对不起。我将编辑上面的错误消息。谢谢。你在哪里实例化$session?那是你的代码吗?为什么不在任何地方实例化
$session
对象呢?这是lynda.com视频中的一个教程。。。我跟着。。我真傻。。我完全忘了实例化会话类!。。对不起,我是如此粗鲁的家伙:)。。再次感谢:)你有那个错误的行号吗?啊,对不起。我将编辑上面的错误消息。谢谢。你在哪里实例化$session?那是你的代码吗?为什么不在任何地方实例化
$session
对象呢?这是lynda.com视频中的一个教程。。。我跟着。。我真傻。。我完全忘了实例化会话类!。。对不起,我是如此粗鲁的家伙:)。。再次感谢:)