使用OOP PHP制作登录屏幕
我是PHP的初学者,我正在尝试使用PHP制作登录屏幕。。。但我总是犯这个错误 (!)致命错误:在C:\wamp\www\photo\u gallery\public\admin\login.php第12行的非对象上调用成员函数login() 这是我的密码: Login.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
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视频中的一个教程。。。我跟着。。我真傻。。我完全忘了实例化会话类!。。对不起,我是如此粗鲁的家伙:)。。再次感谢:)