Извикване на членска функция на не-обект (включва база данни.php)

Работя върху нов уебсайт и пренаписах част от работещия си код за новия, за да пресъздам системата за влизане. За съжаление, пренаписаната версия не работи, така че позволете ми да обясня какво се случва.

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

Досега бинго - работи. Те са влезли и разглеждат страници само за членове. Заглавната лента обаче е друга история. Все още показва „ВХОД“ и „РЕГИСТРАЦИЯ“, въпреки че съм влязъл. Веднага реших, че това е проблем с този конкретен php файл, така че влязох само в този php, заобикаляйки индекса. Когато се опитам да вляза само на тази празна страница, получавам: Фатална грешка: Извикване на функция, която не е член, подготви() на ред 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="/bgbase.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 е невярно, което обикновено означава, че връзката ви не работи. Ако щеше да пише 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 обект ( )... Тук нещо се обърква.   -  person Michael Harris    schedule 06.08.2016
comment
Този проблем е решен чрез промяна на всичко на MySQLi за сега. Имам нов проблем за отстраняване на грешки, който не е свързан. Резултатът ми сега се връща нули вместо това, което трябва да бъде. Благодаря, че си наоколо, за да споделяш идеи, Rasclatt!   -  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