Demetri K.2 Ответов: 1

Вызов функции-члена load() на null при попытке вызвать страницу входа в систему


Я создаю CMS. При нажатии кнопки входа в систему должно выскочить меню. Но вместо этого я получаю

Fatal error: Uncaught Error: Call to a member function load() on null in C:\Program Files\Ampps\www\CMS\app_main\app\login.php:38 Stack trace: #0 {main} thrown in C:\Program Files\Ampps\www\CMS\app_main\app\login.php on line 38


Вот файл входа в систему

include("init.php");

if (isset($_POST['username']))
{
    // get data
    $CMS->Template->setData('input_user', $_POST['username']);
    $CMS->Template->setData('input_pass', $_POST['password']);

    // validate data
    if ($_POST['username'] == '' || $_POST['password'] == '')
    {
        // show error
        if ($_POST['username'] == '') { $CMS->Template->setData('error_user', 'required'); }
        if ($_POST['password'] == '') { $CMS->Template->setData('error_pass', 'required'); }
        $CMS->Template->setAlert('Please fill in all required fields', 'error');
        echo '<script type="text/javascript">jQuery.colorbox.resize();</script>';
        $CMS->Template->load(APP_PATH . "core/views/v_login.php");
    }
    else if ($CMS->Auth->validateLogin($CMS->Template->getData('input_user'), $CMS->Template->getData('input_pass')) == FALSE)
    {
        // invalid login
        $CMS->Template->setAlert('Invalid username or password!', 'error');
        echo '<script type="text/javascript">jQuery.colorbox.resize();</script>';
        $CMS->Template->load(APP_PATH . "core/views/v_login.php");
    }
    else
    {
        // successful log in
        $_SESSION['username'] = $CMS->Template->getData('input_user');
        $_SESSION['loggedin'] = TRUE;
        $CMS->Template->load(APP_PATH . "core/views/v_loggingin.php");
    }
}
else
{
    $CMS->Template->load(APP_PATH . "core/views/v_login.php");
}


А вот включенный файл init

<?php

// create application settings
define("SITE_PATH", "http://localhost/CMS/app_main/%22);
define("APP_PATH", str_replace("\", "/", dirname(FILE)) . "/");

define("SITE_RESOURCES", "http://localhost/CMS/app_main/resources/%22);
define("APP_RESOURCES", "http://localhost/CMS/app_main//app/resources/%22);
define("SITE_CSS", "http://localhost/CMS/app_main/app/resources/css/style.css%22);

// database settings
$server = 'localhost';
$user = 'root';
$pass = 'mysql';
$db = 'cms';

// error reporting
mysqli_report(MYSQLI_REPORT_ERROR);

// create FlightPath core object
require_once(APP_PATH . "core/core.php");
$CMS = new CMS_Core($server, $user, $pass, $db);


основной файл, в котором находится CMS

<?php 
//main CMS file and functionality
class CMS_Core{
    public $Template, $Auth, $Database;
 
    function __construct($server, $user, $pass, $db)
    {
        //db connect
        $this->Database= new mysqli($server, $user, $pass, $db);
        // create template object
        include(APP_PATH . "core/models/m_template.php");
 
        $this->$Template = new Template();
        $this->$Template->setAlertTypes(array('success', 'warning', 'error'));
        //create auth object
        include(APP_PATH . "core/models/m_auth.php");
        $this->Auth = new Auth();
 
        /* session start */
        session_start();
    }
    function __destruct()
    {
        $this->Database->close();
    }
 
    function head(){
        if($this->Auth->checkLoginStatus()){
            include(APP_PATH . "core/templates/t_head.php");
        }
        if (isset($_GET['login']) && $this->Auth->checkLoginStatus() == false){
            include(APP_PATH . "core/templates/t_login.php");
        }
    }
 
    function body_class(){
        if($this->Auth->checkLoginStatus()){
            echo "cms_editing";
        }
    }
 
    function toolbar(){
        if($this->Auth->checkLoginStatus()){
            include(APP_PATH . "core/templates/t_toolbar.php");
        }
    }
 
    function login_link(){
        if($this->Auth->checkLoginStatus()){
            echo"<a href='" . SITE_PATH . "'app/logout.php'>Logout</a>";
        }else{
            echo"<a href='?login'>Login</a>";
        }
    }
}


И логин - файл с его кодом. На всякий случай.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Log in</title>
    <link rel="stylesheet" href="views/style.css">
</head>
<body>
    <h1> Log In </h1>
    <div id="content">

    <form action="" method="POST">
        <div>
        <?php 
          $alerts = $this->getAlerts();
          if ($alerts !=''){echo '<ul class="alerts">' . $alerts . '</ul>';}
         ?>
            <div class="row">
                <label for="username">Username: *</label>
                <input type="text" name="username" value="<?php echo $this->getData ('input_user')?>">
                <div class="error"><?php echo $this->getData ('error_user'); ?></div>
            </div>
            <div class="row">
                <label for="password">Password: </label>
                <input type="password" name="password" value="<?php echo $this->getData ('input_pass')?>">
                <div class="error"><?php echo $this->getData ('error_pass'); ?></div>
            </div>
            <div class="row">
                <p class="required"> required</p>
                <input type="submit" name="submit" class="submit" value="submit">
            </div>
        </div>

    </form>
    </div>
</body>
</html>


Что я уже пробовал:

Я попытался изменить фиксированный путь к файлу для входа в систему и попытался посмотреть, есть ли что-то с файлом шаблона. Пока ничего.

1 Ответов

Рейтинг:
1

OriginalGriff

Проблема в том, что что-то пусто: вероятно $CMS->Template так как это то, что load вызывается на работу.

Но какой именно и почему? Вот в чем вопрос - и мы не можем ответить на него без вашего кода и данных, доступных и запущенных...

Позвольте мне просто объяснить, что означает ошибка: вы пытались использовать переменную, свойство или возвращаемое значение метода, но оно содержит null - что означает, что в переменной нет экземпляра класса.
Это немного похоже на карман: у вас есть карман в рубашке, который вы используете, чтобы держать ручку. Если вы сунете руку в карман и обнаружите, что там нет ручки, вы не сможете подписать свое имя на листе бумаги - и вы получите очень смешные взгляды, если попытаетесь! Пустой карман дает вам нулевое значение (здесь нет ручки!), поэтому вы не можете сделать ничего, что обычно делали бы, когда вы извлекли свою ручку. Почему он пуст? Вот в чем вопрос: может быть, вы забыли взять ручку, когда уходили из дома сегодня утром, или, возможно, вы оставили ручку в кармане вчерашней рубашки, когда снимали ее вчера вечером.

Мы не можем сказать, потому что нас там не было, и, что еще важнее, мы даже не можем видеть вашу рубашку, не говоря уже о том, что находится в кармане!

Вернемся к компьютерам, и вы каким - то образом сделали то же самое-и мы не можем увидеть ваш код, а тем более запустить его и узнать, что содержит null, когда это не должно быть.
Но вы можете - запустить свою программу в отладчике (Xdebug - инструмент для отладчика и профилировщика PHP[^] может помочь), и когда он терпит неудачу, вы можете увидеть линию, на которой он нашел проблему. Затем вы можете начать просматривать различные его части, чтобы увидеть, какое значение равно null, и начать просматривать свой код, чтобы узнать, почему. Поэтому поставьте точку останова в начале метода, содержащего строку ошибки, и снова запустите программу с самого начала. На этот раз отладчик остановится перед ошибкой и позволит вам изучить, что происходит, пройдя через код, глядя на ваши значения.

Но мы не можем этого сделать - у нас нет вашего кода, мы не знаем, как его использовать, если бы он у нас был, у нас нет ваших данных. Так что попробуйте - и посмотрите, сколько информации вы можете узнать!