登录后PHP不会打开网页

问题描述:

我想创建一个使用OOP PHP代码和MySQL的登录系统,但是登录后它不会把我带到下一页。它告诉我如果我没有' t使用数据库中的凭据,即使我在数据库中使用了用户,它似乎总是将我重定向回登录页面。 下面是从网页和我的课的PHP,一切似乎是正确的,但它不工作,我不知道为什么。登录后PHP不会打开网页

的login.php

<?php 
ob_start(); 
require_once ("init.php"); 

if ($session->loggedIn()) {redirect("SecLogin.php");} 

if (isset($_POST['submit'])) 
{ 
    $email = trim($_POST['email']); 
    $password = trim($_POST['pword']); 

    $userFound = User::verify($email, $password); 

    if ($userFound) 
    { 
     $session->login($userFound); 
     redirect("SecLogin.php"); 
    } 
    else 
    { 
     $message = "Your Email Address or Password are not recognised"; 
     echo $message; 
    } 
} 
else 
{ 
    $email = ""; 
    $password = ""; 
} 
?> 

SecLogin.php

<?php 
require_once ("init.php"); 

if(!$session->loggedIn()) {redirect("login.php");} 
?> 

的init.php

<?php 

require_once ("functions.php"); 
require_once ("constants.php"); 
require_once ("database.php"); 
require_once ("user.php"); 
require_once ("session.php"); 

session.php文件

<?php 

class Session 
{ 
private $logIn = false; 
public $userE; 

public function __construct() 
//construct function 
{ 
    session_start(); 
    $this->check(); 
} 

public function loggedIn() 
//checks whether a user is logged in 
{ 
    return $this->logIn; 
} 

public function login($user) 
//Logs the user in 
{ 
    if ($user) 
    { 
     $this->userE = $_SESSION['UserE'] = $user->email; 
     $this->logIn = true; 
    } 
} 

public function logout() 
//Logs out the user 
{ 
    unset($_SESSION['UserE']); 
    unset($this->userE); 
    $this->logIn = false; 
} 

private function check() 
//Checks whether the user exists 
{ 
    if (isset($_SESSION['UserE'])) 
    { 
     $this->userE = $_SESSION['UserE']; 
     $this->logIn = true; 
    } 
    else 
    { 
     unset($this->userE); 
     $this->logIn = false; 
    } 
} 
} 
//instantiates the class 
$session = new Session(); 

user.php的

<?php 

class User 
{ 
public $id; 
public $firstname; 
public $lastname; 
public $email; 
public $password; 

public static function findUser() 
{ 
    return self::findQuery("SELECT * FROM user"); 
} 

public static function locateUser($userMail) 
{ 
    $datasetArray = self::query("SELECT * FROM user WHERE User_Email = $userMail LIMIT 1"); 

    return !empty($datasetArray) ? array_shift($datasetArray) : false; 
} 

public static function findQuery($stmt) 
{ 
    global $database; 
    $resultSet = $database->query($stmt); 
    $instantArray = array(); 

    while ($row = mysqli_fetch_array($resultSet)) 
    { 
     $instantArray[] = self::instant($row); 
    } 

    return $instantArray; 
} 

public static function verify($email, $password) 
{ 
    global $database; 
    $email = $database->escapeString($email); 
    $password = $database->escapeString($password); 

    $sql = "SELECT * FROM user WHERE "; 
    $sql .= "User_Email = '{$email}'"; 
    $sql .= "AND User_Password ='{$password}'"; 
    $sql .= "LIMIT 1"; 

    $verifyArray = self::findQuery($sql); 

    return !empty($verifyArray) ? array_shift($verifyArray) : false; 
} 

public static function instant($record) 
{ 
    $instant = new self; 


    foreach ($record as $attr => $value) 
    { 
     if ($instant->hasAttr($attr)) 
     { 
      $instant->$attr = $value; 
     } 
    } 

    return $instant; 
} 

private function hasAttr($attr) 
{ 
    $properties = get_object_vars($this); 
    return array_key_exists($attr, $properties); 
} 
} 

database.php中

<?php 

require_once ("constants.php"); 

class Database 
{ 
public $conn; 

function __construct() 
{ 
    $this->openDbConnection(); 
} 

public function openDbConnection() 
//Opens the connection to the database 
{ 
    $this->conn = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD,DB_NAME); 

    if ($this->conn->connect_errno) 
    { 
     die("Database Connection Failed" . $this->conn->connect_error); 
    } 
} 

public function query($sqlStmt) 
// 
{ 
    $result = $this->conn->query($sqlStmt); 

    $this->confirmQuery($result); 

    return $result; 
} 

private function confirmQuery($result) 
{ 
    if(!$result) 
    { 
     die("Query Failed".$this->conn->error); 
    } 
} 

public function escapeString($string) 
{ 
    $escape = $this->conn->real_escape_string($string); 
    return $escape; 
} 

public function insertId() 
{ 
    return $this->conn->insert_id; 
} 
} 

$database= new Database(); 

这是PHP调试工作。

开始像这样:去你的应用程序中你怀疑最不喜欢的地方。如果是我,我会从这里开始:

$this->logIn = true; 
die('Did I make it to line '.__LINE__.'?'); 

如果应用程序没有死,那么你可能必须关闭Cookie或缺乏在你的PHP安装会话的支持。如果应用程序不能实现,则向后退出,直到找到不符合预期的行为。

+0

感谢您的回答,使用这个我发现它归结于User类开始创建的字符串需要与数据库表字段名称相同。另一种选择是当用户的记录被分配给数组'datasetArray'时,将每个字符串分配给数组中的特定值。 –

+0

@nickfallows好的工作! – WEBjuju