Kann den Fehler nicht finden

SantaCruze

Erfahrenes Mitglied
Hallo Zusammen :) Und zwar habe ich ein kleines Problem bei einem Script. Ich habe eine DB Klasse dahinter , aber er gibt mir nun beim Aufruf eines Querys

PHP:
        $pages_sql= $this->query("SELECT * FROM seiten ORDER BY code");
        $this->err();


Diese Meldung aus : Fatal error: Using $this when not in object context in C:\xampp2\xampp\htdocs\dreamcms\index.php on line 5

Nun arbeite ich erst seit wenigen Tagen mit Klassen und hab ehrlich gesagt keine Ahnung was daran falsch ist.
 
Zuletzt bearbeitet:
Klingt als würdest du $this nicht im Klassenkontext nutzen. $this ist dann zu benutzten wenn Du dich in der eigenen Klasse befindest und zB Zugriff auf Klassenatribute zu erhalten.
Zeig mal etwas mehr von deinem Code.
 
Gut dann weiß ich woran das liegt. Problem ist einfach ich habe warscheinlich die Klasse geschlossen am ende bzw. habe ich die klasse als include eingesetzt aber sie zu früh geschlossen. Werde das sobald ich zuhause bin dann ausprobieren und notfalls wenn das Problem immernoch besteht nochmal hier posten. Trotzdem danke für die Antwort.
 
Also ich krieg trotzdem nochn fehler das er immer ne TFunktion erwartet. Allerdings habe ich hin und her probiert aber ich kriege die Fehlermeldung net weg. Schließe ich die Class, kommt die Object fehlermeldung. Öffne ich die klasse und setze das } ans ende des scriptes kommt expecting t-funktion dbclass blabla.

Ich poste einfach mal beide Teile hier,

Dbclass

PHP:
<?php
require("config.php");

class cl_extended_database
{
    var $started = false;
    var $debug = false;
    var $var_sql;
    var $var_result;
    var $var_error;
    var $var_errno;
    var $var_link;
    var $db_connected = false;
    var $db_selected = false;

    function __construct()
    {
        global $CMS;
        $this->connect($CMS["mysql"]["host"], $CMS["mysql"]["user"], $CMS["mysql"]["pass"]);
        $this->select_db($CMS["mysql"]["db"]);
    }

    function connect($host, $user, $password)
    {
        if ($this->debug) {
            echo "cl_database::connect('$host','$user','$password');<br>";
        }
        $this->var_link = mysql_connect($host, $user, $password);
        $this->db_connected = true;
    }

    function __destruct()
    {
        if ($this->debug) {
            echo "cl_database::__destruct();<br>";
        }
        @mysql_free_result($this->var_result);
        @mysql_close($this->var_link);
    }

    function select_db($db)
    {
        if ($this->debug) {
            echo "cl_database::select_db();<br>";
        }
        $db_sel = mysql_select_db($db, $this->var_link);
        if (!$db_sel) {
            $this->var_sql = "SELECT DB '$db';";
            $this->var_error = mysql_error($this->var_link);
            $this->var_errno = mysql_errno($this->var_link);
            $this->var_result = false; //this->error() == true;
        } else {
            $this->var_sql = "SELECT DB '$db';";
            $this->var_result = true; //this->error() == false;
        }
        $this->db_selected = !$this->var_result;
    }

    function query($sql)
    {
        if ($this->debug) {
            echo "cl_database::query('$sql');<br>";
        }
        // echo "Query: <b>$sql</b><br>";
        // echo "cl_database::query('$sql');<br>";
        $db_query = new cl_extended_database;

        $this->var_sql = trim($sql);
        $this->var_result = mysql_query($this->var_sql, $db_query->var_link);

        if (!$this->var_result) {
            $this->var_errno = mysql_errno($db_query->var_link);
            $this->var_error = mysql_error($db_query->var_link);
        }

        unset($db_query);
    }

    function error()
    {
        if ($this->debug) {
            echo "cl_database::error();<br>";
        }
        
        $tmp = $this->var_result;
        $tmp = (bool)$tmp;
        $tmp = !$tmp;
        return $tmp;
    }
    function geterror()
    {
        if ($this->debug) {
            echo "cl_database::geterror();<br>";
        }
        if ($this->error()) {
            $str = "<br>\n";
            $str .= "Query: <b>" . $this->var_sql . "</b><br>\n";
            $str .= "Error: <b>" . $this->var_error . "</b><br>\n";
            $str .= "Error Number: <b>" . $this->var_errno . "</b><br>\n";
        } else {
            $str = "Error: No Error!<br>";
        }
        return $str;
    }
    function numrows()
    {
        if ($this->debug) {
            echo "cl_database::numrows();<br>";
        }
        if ($this->error()) {
            $return = -1;
        } else {
            $return = mysql_num_rows($this->var_result);
        }
        return $return;
    }
    function fetch()
    {
        if ($this->debug) {
            echo "cl_database::fetch();<br>";
        }
        if ($this->error()) {
            echo "<br>\nEs trat ein Fehler auf. Bitte ?berpr?fen sie ihr";
            echo "MySQL-Query.\n<br>";
            $return = null;
        } else {
            $return = mysql_fetch_array($this->var_result);
        }
        return $return;
    }
    function err()
    {
        if ($this->debug) {
            echo "cl_database::err();<br>";
        }
        if ($this->error()) {
            echo $this->geterror();
        }
    }
    
    function reinit()
    {
        $this->__destruct();
        $this->__construct();
    } 
    
    function dbclose()
    {
        $this->__destruct();
    }
    
    function start()
    {
        global $CMS;
        if (!$this->started) {
            if ($this->db_connected == false) {
                $this->connect($CMS["mysql"]["host"], $CMS["mysql"]["user"], $CMS["mysql"]["pass"]);
                $this->db_connected = true;
            } 
            if ($this->db_selected == false) {
                $this->select_db($CMS["mysql"]["db"]);
                $this->db_selected == $this->error();
            } 
            $this->started = true;
        } 
    }

    ?>


PHP:
<?php
  error_reporting(E_ALL);
include("includes/config.php");
include("includes/dbclass.php");
include_once("header.php");

        $pages_sql= $this->query("SELECT * FROM seiten ORDER BY code");
        $this->err();
		
		echo "<table border='0' width='400'>";
		
		while ($pages = $this->fetch())
		{
		$story_sql = $this->query("SELECT * FROM news WHERE   page='{$pages['code']}' AND online IS NOT NULL ORDER BY online DESC");
		
		$story_result = $this->fetch($story_sql);
		
		if ($story_result = $this->num_rows())
		{
		$story = $this->fetch($story_result);
		echo "<tr><td><h2>{$pages['beschreibung']}<h2><p>
		{$story['titel']}</p>
		<p alight='right' class='morelink'>
		<a href='page.php?page={$pages['code']}'>
		Mehr Lesen {$pages['code']} ...
		</a></p></td>
		<td with='100'>";
		
		if ($story['image'])
		{
		echo "<img src='resize_image.php?image='";
		echo urlencode($story['image']);
		echo "'$max_width=80&max_height=60'/>";
		}
		echo "</td></tr>";
		}
		}
		echo "</table>";
		;
		include_once("footer.php");
?>

Auf glück das jmd die fehlenden Teile findet.
 
Okay also so ganz sinnig ist deine Klasse nicht.
PHP:
       $pages_sql= $this->query("SELECT * FROM seiten ORDER BY code"); 
        $this->err();

funktioniert nicht weil, Du dich nicht innerhalb eines Objektes bewegst.
Du müsstest hier ein neues Objekt deiner Datenbankklasse anlegen und dann damit arbeiten.

Was ich mich allerdings frage, warum legst Du innerhalb der Klasse nochmal ein Objekt an und vorallem warum für jeden Query eine eigene Verbindung?

PHP:
<?php 
require("config.php"); 

class cl_extended_database 
{ 
    var $started = false; 
    var $debug = false; 
    var $var_sql; 
    var $var_result; 
    var $var_error; 
    var $var_errno; 
    var $var_link; 
    var $db_connected = false; 
    var $db_selected = false; 

    function __construct() 
    { 
        global $CMS; 
        $this->connect($CMS["mysql"]["host"], $CMS["mysql"]["user"], $CMS["mysql"]["pass"]); 
        $this->select_db($CMS["mysql"]["db"]); 
    } 

    function connect($host, $user, $password) 
    { 
        if ($this->debug) { 
            echo "cl_database::connect('$host','$user','$password');<br>"; 
        } 
        $this->var_link = mysql_connect($host, $user, $password); 
        $this->db_connected = true; 
    } 

    function __destruct() 
    { 
        if ($this->debug) { 
            echo "cl_database::__destruct();<br>"; 
        } 
        @mysql_free_result($this->var_result); 
        @mysql_close($this->var_link); 
    } 

    function select_db($db) 
    { 
        if ($this->debug) { 
            echo "cl_database::select_db();<br>"; 
        } 
        $db_sel = mysql_select_db($db, $this->var_link); 
        if (!$db_sel) { 
            $this->var_sql = "SELECT DB '$db';"; 
            $this->var_error = mysql_error($this->var_link); 
            $this->var_errno = mysql_errno($this->var_link); 
            $this->var_result = false; //this->error() == true; 
        } else { 
            $this->var_sql = "SELECT DB '$db';"; 
            $this->var_result = true; //this->error() == false; 
        } 
        $this->db_selected = !$this->var_result; 
    } 

    function query($sql) 
    { 
        if ($this->debug) { 
            echo "cl_database::query('$sql');<br>"; 
        } 
        // echo "Query: <b>$sql</b><br>"; 
        // echo "cl_database::query('$sql');<br>"; 
        
        $this->var_sql = trim($sql); 
        $this->var_result = mysql_query($this->var_sql, $this->var_link); 

        if (!$this->var_result) { 
            $this->var_errno = mysql_errno($this->var_link); 
            $this->var_error = mysql_error($this->var_link); 
        } 

    } 

    function error() 
    { 
        if ($this->debug) { 
            echo "cl_database::error();<br>"; 
        } 
         
        $tmp = $this->var_result; 
        $tmp = (bool)$tmp; 
        $tmp = !$tmp; 
        return $tmp; 
    } 
    function geterror() 
    { 
        if ($this->debug) { 
            echo "cl_database::geterror();<br>"; 
        } 
        if ($this->error()) { 
            $str = "<br>\n"; 
            $str .= "Query: <b>" . $this->var_sql . "</b><br>\n"; 
            $str .= "Error: <b>" . $this->var_error . "</b><br>\n"; 
            $str .= "Error Number: <b>" . $this->var_errno . "</b><br>\n"; 
        } else { 
            $str = "Error: No Error!<br>"; 
        } 
        return $str; 
    } 
    function numrows() 
    { 
        if ($this->debug) { 
            echo "cl_database::numrows();<br>"; 
        } 
        if ($this->error()) { 
            $return = -1; 
        } else { 
            $return = mysql_num_rows($this->var_result); 
        } 
        return $return; 
    } 
    function fetch() 
    { 
        if ($this->debug) { 
            echo "cl_database::fetch();<br>"; 
        } 
        if ($this->error()) { 
            echo "<br>\nEs trat ein Fehler auf. Bitte ?berpr?fen sie ihr"; 
            echo "MySQL-Query.\n<br>"; 
            $return = null; 
        } else { 
            $return = mysql_fetch_array($this->var_result); 
        } 
        return $return; 
    } 
    function err() 
    { 
        if ($this->debug) { 
            echo "cl_database::err();<br>"; 
        } 
        if ($this->error()) { 
            echo $this->geterror(); 
        } 
    } 
     
    function reinit() 
    { 
        $this->__destruct(); 
        $this->__construct(); 
    }  
     
    function dbclose() 
    { 
        $this->__destruct(); 
    } 
     
    function start() 
    { 
        global $CMS; 
        if (!$this->started) { 
            if ($this->db_connected == false) { 
                $this->connect($CMS["mysql"]["host"], $CMS["mysql"]["user"], $CMS["mysql"]["pass"]); 
                $this->db_connected = true; 
            }  
            if ($this->db_selected == false) { 
                $this->select_db($CMS["mysql"]["db"]); 
                $this->db_selected == $this->error(); 
            }  
            $this->started = true; 
        }  
    } 

    ?>

So macht das etwas mehr Sinn.

PHP:
       $pages_sql= new cl_extended_database ();
$pages_sql->query("SELECT * FROM seiten ORDER BY code"); 
        $pages_sql->err();
Nun solltest Du so darauf zugreifen können!
 
Zurück