Counter Class klappt nicht

VanHellsehn

Erfahrenes Mitglied
Hi,
Ich habe mir mal die Zeit genommen nen neuen Counter zu machen.
Nur leider klappt dieser nicht.
Evtl. könnt ihr mir helfen bei der Fehler suche..
Erbricht ab aber gibt keinen Fehler geschweigenden einen Notice aus..
Hier ist mein Code:
PHP:
<?php
class Counter
{
    // MySql-Variablen werden initialisiert
    private $host = '';
    private $user = '';
    private $pass = '';
    private $database = '';
    
    public function __construct($host, $user, $pass, $database)
    {
        // Parameter werden den Variablen übergeben
        $this->host = $host;
        $this->user = $user;
        $this->pass = $pass;
        $this->database = $database;
        // Verbindung wird hergestellt
        $connect_result = $this->connect();
        if($connect_result !== true)
        {
            throw new Exception("<b>COUNTER:</b>".$connect_result);
        }
    }
    public function __destruct()
    {
        // Datenbankverbindung schließen
        $db->close();
    }
    private function connect()
    {
        // MySql-Verbindung wird aufgebaut
        $db = new MySqli($this->host, $this->user, $this->pass, $this->database);
        // Verbindung auf Fehler Prüfen
        if(false === $db)
        {
            return "Fehler bei der Verbindung zu Datenbank";
        }
        else
        {
            return true;
        }
    }
    protected function lockIp($keyword)
    {
        // IP Sperren
        $lock_result = 
            $db->query("INSERT INTO `ip_locks`
                               (ip, timestamp, keyword) 
                                VALUES
                               ('".$_SERVER['REMOTE_ADDR']."','".time()."','".$keyword."')
                       ");
        // Insert auf Erfolg prüfen
        if(false === $lock_result)
        {
            return "Fehler bei dem Sperren der IP";
        }
        else
        {
            return true;
        }
    }
    private function unlock_oldip($locktime)
    {
        // Zeit bis wann die IP gesperrt ist wird errechnet
        $timelife = time() - $locktime;
        // IP Sperren
        $lock_result = 
            @$db->query("DELET FROM `ip_locks`
                               WHERE timestamp < ".$timelife."
                       ");
    }
    public function visit_counter($locktime)
    {
        // Alte IPs entfernen
        $this->unlock_oldip($locktime);
        // Prüfen ob IP noch gesperrt ist
        $islock_result = 
            @$db->query("SELECT * FROM `ip_lock`
                                  WHERE ip = '".$_SERVER['REMOTE_ADDR']."'");
        // Ergbniss Prüfen
        if($islock_result->num_rows == 0)
        {
            // IP sperren
            $ip_lock = $this->lockIp("counterVisit");
            // Prüfen ob IP gesperrt wurde
            if(true !== $ip_lock)
            {
                throw new Exception("<b>COUNTER:</b>".$ip_lock);
            }
            $visit_instert = 
                $db->query("UPDATE `counter_level`
                                   SET level = level+1.0
                                   WHERE keyword = 'total'");
            
        }
    }
    public function hit_counter()
    {
        
    }
    public function online_counter()
    {
        
    }
}
?>
 
Wo bricht er denn ab? (einen die("bump"); an verschiedenen Stellen ausprobieren).
So kann man das Fehlergebiet stark eingrenzen
 
Hi,
Habs nochmal um geschrieben um die Fehler die enstanden sind zu entfernen..
Nur leider bekomme ich das mit dem MySqli Objekt nicht hin.

PHP:
<?php
class Counter
{
    // MySql-Variablen werden initialisiert
    private $host = '';
    private $user = '';
    private $pass = '';
    private $database = '';
    private $db = '';
    
    public function __construct($host, $user, $pass, $database)
    {
        // Parameter werden den Variablen übergeben
        $this->host = $host;
        $this->user = $user;
        $this->pass = $pass;
        $this->database = $database;
        // Verbindung wird hergestellt
        $connect_result = $this->connect();
        if($connect_result !== true)
        {
            throw new Exception("<b>COUNTER:</b>".$connect_result);
        }
    }
    public function __destruct()
    {
        // Datenbankverbindung schließen
        $this->db->close();
    }
    private function connect()
    {
        // MySql-Verbindung wird aufgebaut
        $this->db = new MySqli($this->host, $this->user, $this->pass, $this->database);
        // Verbindung auf Fehler Prüfen
        if(false === $this->db)
        {
            return "Fehler bei der Verbindung zu Datenbank";
        }
        else
        {
            return true;
        }
    }
    protected function lockIp($keyword)
    {
        // IP Sperren
        $lock_result = 
            $this->db->query("INSERT INTO `ip_locks`
                               (ip, timestamp, keyword) 
                                VALUES
                               ('".$_SERVER['REMOTE_ADDR']."','".time()."','".$keyword."')
                       ");
        // Insert auf Erfolg prüfen
        if(false === $lock_result)
        {
            return "Fehler bei dem Sperren der IP";
        }
        else
        {
            return true;
        }
    }
    private function unlock_oldip($locktime)
    {
        // Zeit bis wann die IP gesperrt ist wird errechnet
        $timelife = time() - $locktime;
        // IP Sperren
        $lock_result = 
            $this->db->query("DELET FROM `ip_locks`
                               WHERE timestamp < ".$timelife."
                       ");
    }
    public function visit_counter($locktime)
    {
        // Alte IPs entfernen
        $this->unlock_oldip($locktime);
        // Prüfen ob IP noch gesperrt ist
        $islock_result = 
            $this->db->query("SELECT * FROM `ip_lock`
                                  WHERE ip = '".$_SERVER['REMOTE_ADDR']."'");
        // Ergbniss Prüfen
        if($islock_result->num_rows == 0)
        {
            // IP sperren
            $ip_lock = $this->lockIp("counterVisit");
            // Prüfen ob IP gesperrt wurde
            if(true !== $ip_lock)
            {
                throw new Exception("<b>COUNTER:</b>".$ip_lock);
            }
            $visit_instert = 
                $this->db->query("UPDATE `counter_level`
                                   SET level = level+1.0
                                   WHERE keyword = 'total'");
            
        }
    }
    public function hit_counter()
    {
        
    }
    public function online_counter()
    {
        
    }
}
?>


Wenn ich diesen Code verwende wobei ich einfach nur aus $db $this->db gemacht habe und ein Query Resukt verarbeiten will sagt er mir das es kein Objekt ist..

Notice: Trying to get property of non-object in XXX on line 82​
 
Hier meine Vermutung ;)

Code:
SELECT * FROM `ip_lock`

Das heist ip_locks in den anderen Querys.
 
Zuletzt bearbeitet:
Zurück