Вызов функции-члена для не-объекта (включая database.php)

Я работаю над новым веб-сайтом и переписал часть моего ранее работающего кода для нового, чтобы воссоздать систему входа в систему. К сожалению, переписанная версия не работает, поэтому позвольте мне объяснить, что происходит.

У меня есть "index.php", который содержит "titlemenu.php", который используется на каждой отдельной странице. Я намерен запустить окно входа в это меню заголовка (верхняя панель), чтобы люди могли войти в систему, независимо от того, какая страница у них есть, и когда они успешно входят в систему, она обновляет страницу, на которой они находятся в данный момент, чтобы они вошли в систему.

Пока бинго - работает. Они вошли в систему и просматривают страницы только для членов. Однако строка заголовка — это отдельная история. Он по-прежнему показывает «ВХОД» и «РЕГИСТРАЦИЯ», несмотря на вход в систему. Сразу же я подумал, что это проблема с этим конкретным php-файлом, поэтому я вошел только в этот php, минуя index. Когда я пытаюсь войти только на этой пустой странице, я получаю: Неустранимая ошибка: вызов функции, не являющейся членом, prepare() в строке 18 Я знаю, что обычно это означает, что ваша переменная не объявлена ​​или нет был запущен, поэтому я решил устранить неполадки. Я сделал var_dump для каждой используемой переменной, которая вернула правильные результаты. Я проверил index.php, который не содержит ошибок, работает нормально и показывает, что пользователи вошли в систему. «С возвращением, RhapidFyre!» это то, что он говорит в индексе, но окно входа показывает, что я еще не вошел в систему.

loginheader.php

    <?include "641a/database.php";?><div id="login"><?
$mydbid = $_SESSION['user'];
$myquery = "SELECT * FROM logins WHERE dbid = $mydbid";
$myrow = mysqli_fetch_assoc($myquery);
$myname = $myrow['nickname'];

if($_GET['do'] == "logout") {
    unset($_SESSION['user']);
    ?><script type="text/javascript">
    window.location.replace("index.php");
    </script><?
}
if($_GET['do'] == 'login') {
            $query = 'SELECT * FROM logins WHERE username = :username';
            $query_params = array(':username' => $_POST['username']);

            var_dump($query);
            var_dump($query_params);
            try                                          
            {                                            
                $stmt = $db->prepare($query); //LINE 18              
                $result = $stmt->execute($query_params);   
            }                                            
            catch(PDOException $ex)                       
            {
                ?><script type="text/javascript">
                window.location.replace("redirect.php?error=username");
                </script><?
            }(Further irrelevant code follows)

база данных.php

<?  session_start();
$dbusername = "********";
$dbpassword = "********";
$dbhost = "localhost";
$dbname = "********";
$link = mysqli_connect($dbhost, $dbusername, $dbpassword, $dbname);

// PDO Initialization
try {
    $db = new PDO("mysql:host={$dbhost};dbname={$dbname};charset=utf8", $dbusername, $dbpassword); 
}

// If connection fails, die.
catch(PDOException $ex){
    die("Failed to connect to the MySQL Server!" . $ex->getMessage());
}

Фрагмент index.php

<html>
<head>

    <title>My Website Template</title>
    <link rel="stylesheet" type="text/css" href="base.css"/>
</head>
<body>
    <div id="header">
        <?include "pages/titles.php";?>
        <?include "pages/loginheader.php";?>
    </div>

person Michael Harris    schedule 06.08.2016    source источник
comment
В этом случае $db равно false, что обычно означает, что ваше соединение не работает. Если бы он сказал undefined variable db, то это потому, что он не был найден. $db должен быть экземпляром PDO.   -  person Rasclatt    schedule 06.08.2016
comment
Почему из любопытства у вас возникла связь mysqli_ и PDO?   -  person Rasclatt    schedule 06.08.2016
comment
Мне любопытно, как $db возвращает false.. database.php включен в начало файла. Я обновлю свой основной пост, чтобы отразить это. Я посмотрю, почему это было бы ложным.   -  person Michael Harris    schedule 06.08.2016
comment
Поиск проблемы. Я конвертирую все в PDO, когда это действительно работает.   -  person Michael Harris    schedule 06.08.2016
comment
О, я попал! Хорошо, на вашем index.php сразу после включения сделайте print_r($db);. Посмотрите, есть ли там PDO. Посмотрите, сохранилась ли она на той странице.   -  person Rasclatt    schedule 06.08.2016
comment
Хорошо, теперь я вижу проблему. Он возвращается как PDO Object()... Что-то здесь идет не так.   -  person Michael Harris    schedule 06.08.2016
comment
Эта проблема была решена путем замены всего на MySQLi. У меня есть новая проблема для отладки, которая не связана. Мой результат теперь возвращается нулями вместо того, что должно быть. Спасибо, что был рядом, чтобы поделиться идеями, Расклатт!   -  person Michael Harris    schedule 06.08.2016
comment
Для справки, причина, по которой он не работал, заключается в том, что у меня была база данных php в html/641a/database.php, а файл loginheader.php находился в html/pages/loginheader.php, что означает, что он искал $db в html/pages/641a/database.php. ВСЕ проблемы решены.   -  person Michael Harris    schedule 07.08.2016


Ответы (1)


Проблема возникла из-за использования двух типов подключения при попытке отладки. Изменил все это на MySQLi, и все заработало нормально, но создало новые проблемы. Как говорил мой инструктор по программированию: «Ура! Новые ошибки!»

person Michael Harris    schedule 06.08.2016