> Problem z Fatal error: Call to a member function query(

0

Witam
Mam problem... Zainstalowałem sobie skrypt greetCast (do pozdrowień). Wszystko poszło bez problemów, jednak przy panelu admina oraz przy pozdrowieniach na dole wyskakuje błąd:
Fatal error: Call to a member function query() on a non-object in /pozdrowienia/includes/session.php on line 33
Szukałem trochę i podobno mam starszą wersje php. Oto kodzik pliku session.php:

<?php
#####################################################
# greetCast                                         #
# (c) 2006 Adrian Konera                            #
# All rights reserved.                              #
#####################################################

function session_open($path, $name)
{
    return true;
}

function session_close()
{
    return true;
}

function session_read($id)
{
    global $db;
    $db->query("SELECT data FROM ".TBL_SESSION." WHERE session_id = '".$id."'");
    if($db->rows() == 0)
    {
        return "";
    }
    $sess_row = $db->fetch();
    return $sess_row['data'];
}

function session_write($id, $data)
{
    global $db;
    $db->query("REPLACE INTO ".TBL_SESSION."(session_id, data, modtime) VALUES('".$id."', '".$data."', null)");
    return true;
}

function session_remove($id)
{
    global $db;
    $db->query("DELETE ".TBL_SESSION." WHERE session_id = '".$id."'");
    return true;
}

function session_gc($life)
{
    global $db;
    $old = time() - $life;
    $db->query("DELETE FROM ".TBL_SESSION." WHERE UNIX_TIMESTAMP(modtime) < ".$old);
    return true;
}
?>

Co mogę zmienić, aby mi to działało? Bardzo proszę o pomoc...
Z góry Wielkie dzięki!

0

Odszukaj miejsce, w którym jest inicjowana zmienna $db. Tam musi być jakiś błąd

0
maly186 napisał(a)

Odszukaj miejsce, w którym jest inicjowana zmienna $db. Tam musi być jakiś błąd

Można jakoś bardziej szczegółowo? Nie znam sie na php :(

0

Miejsce, w którym pisze coś w stylu "$db = new ...", to co będzie po new to będzie nazwa klasy, znajdź jej deklaracje i popatrz na jej metodę "query"... :P

0

Problem jest w tym, że zmienna $db prawdopodobnie nie jest inicjowana albo nie jest obiektem. Spróbuj wpisać w jakiejś funkcji var_dump($db); zaraz po global $db:

global $db;
var_dump($db);

Wklej wynik to będziemy mogli coś więcej powiedzieć.

0

Witam
Chciałem 'odgrzać tego starego kotleta'. Rozpoczołem przygodę z PHP i próbuję napisać coś podobnego jak powyżej i mam dziwne problemy... Nie wiem jak to możliwe ale wykonując ten sam skrypt od czasu do czasu (przeważnie jak coś w kodzie zmieniam) pojawia mi się błąd jak w tytule. I nie wiem jak to możliwe, lecz czasami mój obiekt MySQLConnection jest:

object(MySQLConnection)[1]
  protected 'serverURL' => string 'localhost' (length=9)
  protected 'serverPort' => int 3306
  protected 'userName' => string 'testadmin' (length=11)
  protected 'userPasswd' => string 'testadmin' (length=11)
  protected 'databaseName' => string 'testdb' (length=6)
  protected 'hConn' => resource(11, mysql link)
  protected 'connected' => boolean true

a sporadycznie:

int 15

lub inna liczba

Wykodziłem to mniej więcej tak:

try {
    $db = new MySQLConnection();
    $sess = new UserSession($db);
    //$sess->impress();
    $sess->login('admin', 'admin');
} catch (MySQLConnectException $e) {
    echo $e->getMessage();
} catch (Exception $e) {
    echo $e->getMessage();
}

I dalej:

class UserSession {

    private $phpSessionId;
    private $dbSessionId;
    private $dbHandle;
    private $loggedIn;
    private $userId;
    private $sessionTimeout;
    private $sessionLifespan;

    public function  __construct(MySQLConnection $dbHandle) {     

        $this->dbHandle = $dbHandle;

        #$this->dbHandle->executeQuery(' W KONSTRUKTORZE ZAWSZE DZIAŁA ');

        # .... itd itp
   }

    public function login($strUsername, $strPasswd) {
        
        if(!$this->loggedIn) {
            $strMD5Passwd = md5($strPasswd);
            $stmt = "SELECT id FROM users WHERE login = '$strUsername' AND passwd_enc = '$strMD5Passwd'";
            $res = array();
            try {
                # CZASEM DZIAŁA, CZASEM NIE UCHWYT BAZY DANYCH TYLKO INTEGER !!!  
                $res = $this->dbHandle->executeQuery($stmt);
            } catch (MySQLQueryException $e) {
                throw new SessionException($e->getMessage());
            }

            # ... itp itd

Czy PHP nie potrafi zapamiętać między wywołaniami funkcji, że coś jest obiektem ? Nie chce używać żadnych global... muszę?

1 użytkowników online, w tym zalogowanych: 0, gości: 1