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);
$result= mysql_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->resid, MYSQL_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