class nesting

Arndtinho

Erfahrenes Mitglied
Hallo,

ich habe zwei Klassen (DB, Login). Damit ich die eingegebenen Loginwerte des Formulars überprüfen kann, brauche ich eine Instanz der classDB in der classLogin. Normalerweise sollte dies doch funktionieren:
PHP:
require('classDB.php');

class Login {

var $uname;
var $upass;
var $dbcon;

function Login($uid, $pwd)
{
   $this->uname = $uid;
   $this->upass = $pwd;
   $this->dbcon = new DB();
}

function ...

}
Ich erhalte aber folgenden Fehler:

Warning: mysql_connect(): Access denied for user

Wieso das?
Die dazugehörige php-Seite sieht so aus:
PHP:
require('../classes/classLogin.php');

$uid = $_POST['txtUid'];
$pwd = $_POST['txtPwd'];

$test = new Login($uid, $pwd);
...
Gruß,
Arndtinho
 
Ja weil der User eben keine Rechte hat sich mit der Datenbank zu verbinden.
Sprich dein Objekt ist erfolgreich angelegt (kannst du auch mit var_dump(Objekt) sehen, jedoch kann die verbindung eben nicht hergestellt werden.
 
Und wie kann ich das ändern?
Ich hab mal zum Test ne einfache Seite gemacht:
PHP:
require_once('includes/config.inc');
require_once('classes/classDB.php');

$Con = new DB($db_host, $db_user, $db_pass);
$sql = "SELECT * FROM user";
$Con->DoSql($sql);
while ($row = $DbCon->GetRes()) {
	echo $row['name']." - ";
	echo $row['vname']."<br>";
}
Funktioniert ohne zu meckern.
Also sollte der User doch Rechte haben auf die Db zuzugreifen.

Grß,
Arndtinho
 
Schau mal auf dein nw DB in der Anweisung und in der obrigen. Wie du feststellen wirst fehlene in der obrigen die Parameter.

Code:
function Login($uid, $pwd) 
{ 
   $this->uname = $uid; 
   $this->upass = $pwd; 
   $this->dbcon = new DB(); 
}

Code:
$Con = new DB($db_host, $db_user, $db_pass);
 
Du lässt eben den Anweisungsblock des Konstruktors leer und machst eine methode zum Connecten, der du die entsprechenden Parameter übergibst.

Denn in meinen Augen hinkt das Beispiel. Du hast dann zwar eine DB-Klasse jedoch kann jede Instanz nur die gleiche Verindung aufbauen, aber keine Verschiedene, da beim Erzeugen des Objektes gleich das Connect gemacht wird aber immer mit den gleichen Parametern ohne das du sie vorher ändern kannst.
 
Die Parameter sollen ja auch nicht geändert werden. Sie werden einmal zentral in der config.inc geändert. Oder verstehe ich das jetzt völlig falsch?

Gruß,
Arndtinho
 
Das hängt ja davon ab, was du mit der Klasse machen willst.
Ich hatte auch schon Skripte wo ich eben eine Verbindung zu unterschiedlichen Datenbanken brauche und da macht dann sowas keinen Sinn es in einer Datei zu habe.

Aber zu deinem eigentlichen Problem zurück, scheint ja dennoch ein falscher bzw unberechtigter Username / Passwrd beim Verbinden verwendet zu werden.
 
Das mit der DB is eine gute Idee. Die Variable aus dem config File rausnehmen und 'manuell' füllen. Hab ich gleich mal geändert, aber es ändert auch nix an der Fehlermeldung. Weil es ist ja erstmal der classLogin völlig egal wo der Wert für $database herkommt.

Arndtinho
 
Das verstehe ich jetzt gerade nicht.
Wenn ich beim Instanziieren der Classe Login automatisch auch eine Instanz der Klasse DB erzeuge, baut dies eine Verbindung zur Datenbank auf.
Hierbei verwendet das ObjektDB dann auch die Objektattribute.
Was passiert denn wenn du in den Konstruktor der DB-Klasse einfach mal ein var_dump von Username, Password und Host ausgbist mit dem du verbinden willst?
 
Zurück