Einzelnen Beitrag anzeigen
Alt 13.05.2007, 17:17  
nieselfriem
Erfahrener Benutzer
 
Registriert seit: 28.11.2004
Beiträge: 302
nieselfriem ist zur Zeit noch ein unbeschriebenes Blatt
Standard Zugriff auf Objekte anderer Klassen

Hallo!
Bisher habe ich ein Script mit drei Dateien.
1. Datei ist die Klasse für den Zugriff auf die Datenbank
2. Ist die Klasse für die Kontrolle und späteres Schreiben der Daten
3. ist einfach die index.php mit der Webseite

Mein Problem ist folgendes.
In meinem DB-Script wird ein object erstellt mit dem ich dann nur durch require zugriff auf die Methoden haben sollte. Jedoch geht das nicht sobald ich mich in eier Klasse bewegen
db-klasse:
PHP-Code:
<?
class mysql_db
{
    var 
$link=false;
    var 
$resid=false;
    var 
$doerror=false;
    var 
$host="localhost";
    var 
$user="root";
    var 
$passwd="";
    var 
$dbname="pepper";    

    function 
connect()
    {
        
$temp=@mysql_connect($this->host$this->user$this->passwd);
        
        if(!
$temp)
        {
            
$this->echoerror();
            return 
false;
        }
        
$this->link=$temp;
        
$temp =@mysql_select_db($this->dbname$temp);
        if(!
$temp)
        {
            
$this->echoerror();
            return 
false;
        }
        
        return 
$this->link;
    }
    
    function 
query($sql)
    {
        if (!
$this->link)
        {
            if(
$this->doerror)
            {
                echo (
"[b]Nicht verbunden![/b]</br>");
                return 
false;
            }
        }
        if (
$this->resid) @mysql_free_result($this->resid);
        
$resultmysql_query($sql$this->link);
        if(!
$result$this->echoerror();
        
$this->resid=$result;
        return 
$result;
                    
    }
    
    function 
echoerror()
    {
        if (!
$this->doerror) return;
        if (!
mysql_errno()) return;
        echo (
"<font color=\"red\">[b]".mysql_errno());
        echo (
": ".mysql_error() ."[/b]</font>
"
);
    }
    
    function 
data()
    {
        if (!
$this->link)
        {
            if(
$this->doerror)
            {
                echo (
"[b]Nicht verbunden![/b]</br>");
                return 
false;
            }
        }
        
        if (!
$this->resid)
        {
            if (
$this->doerror)
                echo (
"[b]Keine Abfrage![/b]</br>");
            return 
false;    
        }
        
$result=mysql_fetch_array($this->residMYSQL_BOTH);
        
$this->echoerror();
        return 
$result;
    }
   
    function 
echoquery($sql)
    {
    
$this->query($sql);
    echo(
"<table border celpadding=\"3\"><tr>");
    
$index=0;
    echo(
"<th>record</th>");
    
while (
$field=mysql_fetch_field($this->resid))
        echo(
"<th>$field->name</th>");
    echo (
"</tr>\n");
    
$rec=0;
    while (
$row=$this->data())
    {
        
$rec++;
        echo(
"<tr><td>$rec</td>");
        for(
$i=0;$i<mysql_num_fields($this->resid); $i++)
            echo(
"<td>".htmlentities($row[$i])."</td>");
        echo (
"</tr>\n");
    }
    echo (
"</table>");
    }

    function 
set_doerror($boolvalue)
    {
        
$this->doerror=$boolvalue;
    }
    
    function 
mysql_db()
    {
        
$this->connect();
    }
}

    
$db = new mysql_db;            
    
    

?>
Kontrollscript
PHP-Code:
<?    
    
require('mysql_db.php');
    class 
registrieren
    
{
         private 
$cname;
         private 
$cvorname;
         private 
$cfirmenname;
         private 
$cpass;
         private 
$cconf;    
         private 
$cmail;
         private 
$cstrasse;
         private 
$chausnr;
         private 
$cplz;
         private 
$cort;
         private 
$ctel;
         private 
$cfax;
         private 
$dbconf;
            
         
        function 
registrieren($name$vorname$firma,$pass$conf$mail$strasse$hausnr$plz$ort$tel)
        {
            
$this->cname=$name;
            
$this->cvorname=$vorname;
            
$this->cfirmenname=$firma;
            
$this->cpass=$pass;
            
$this->cconf=$conf;
            
$this->cmail=$mail;
            
$this->cstrasse=$strasse;            
            
$this->chausnr=$hausnr;
            
$this->cplz=$plz;
            
$this->cort=$ort;
            
$this->ctel=$tel;
            
$this->cfax=$fax;
        }
        function 
checkdatas()
        {
            
            
            
            
$ok=true;
            
$fehlerfeld=array();
            
$db->query("SELECT count(*) from Kunde where email=$this->cmail");
            list(
$anzahl)=$db->data();
                                    
            if (!isset(
$this->cname) || !is_string($this->cname) || trim($this->cname)=="")
            {
                
$ok=false;
                
$fehlerfeld[]="Geben Sie bitte den Namen an!\n";
            }
            
            
            if (!isset(
$this->cvorname) || !is_string($this->cvorname) || trim($this->cvorname)=="")
            {
                
$ok=false;
                
$fehlerfeld[]="Geben Sie bitte den Vornamen an!\n";
            }
            ...
        function 
writedatas()
        {
            
            
$db->query("INSERT INTO Kunde ($this->cname,$this->cvorname, $this->cfirmenname, $this->passwort, $this->cmail, $this->cstrasse, $this->chausnr, $this->cplz, $this->cort, $this->ctel, $this->cfax"); //Feherlder zeiel 47
        
}
Jedoch wird dann die Fehlermedlung "Call to a member function query() on a non-object in /opt/lampp/htdocs/kontakt/registerclass.php on line 47" erzeugt. Diese Meldung kommt nach dem ich mich belesen hatte immer dann wenn das Objekt noch nicht erzeugt sei und man auf die Methoden zugreifen wolle. Ich habe das Objekt doch schon in der Datenbankklasse erzeugt.
Was muß ich machen um dies in mene Klasse zu bekommen?

Gruß niesel
nieselfriem ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten