php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack (1) Themen-Optionen Thema bewerten
Alt 14.09.2008, 19:19  
Neuer Benutzer
 
Registriert seit: 14.09.2008
Beiträge: 2
Mark Taylor befindet sich auf einem aufstrebenden Ast
Standard Fehlermeldung : Call to a member function foo() on a non-object

Schönen guten Abend,
wende mich verzweifelt an Euch, da ich eine Fehlermeldung nicht nachvollziehen kann. Ich habe hier eine Klasse für den Datenbankzugriff und eine Klasse User. Ich habe alle für dieses Problem nicht relevanten Teile entfernt. Um in der Klasse User eine Datenbankabfrage machen zu können, übergebe ich bei der Erzeugung eines User-Objektes, eine Referenz auf ein Objekt der Datenbank-Klasse an den Konstuktor der User-Klasse. Leider wird anscheinend in diesem Moment das Objekt gelöscht. An dieser Stelle erhalte ich die Fehlermeldung:

Notice: Undefined variable: sql in .....

Wenn ich dann in meiner User-Klasse die Funktion CheckUserName() aufrufe bekomme ich die Fehlermeldung:

Fatal error: Call to a member function select() on a non-object in ...

Was ja auch ganz logisch ist, wenn die Referenz auf das Datenbank-Objekt leer ist, kann ich auch nicht die Funktion select() aufrufen.

Wieso übergibt der Interpreter bei : $user = new User(new DBMySQL());
nicht die Referenz an den Konstruktor der User-Klasse ?

Ich habe schon Stunden in Foren nach der Fehlermeldung gesucht und auch gefunden, aber leider nicht die passende Antwort gefunden. Jetzt habe ich mich hier angemeldet in der Hoffnung jemand von Euch könnte mir helfen.

Hier der gekürzte Code:
[php]

error_reporting(E_ALL);

class DBMySQL{
private $connected = FALSE;
private $conn_id = NULL;
private $result = NULL;
private $sql_query;

public function __construct(){
global $mySQL_settings;
$this->host = $mySQL_settings['host'];
$this->user = $mySQL_settings['user'];
$this->pswd = $mySQL_settings['pswd'];
$this->dbname = $mySQL_settings['dbname'];

$this->conn_id = mysql_connect($this->host, $this->user, $this->pswd);
if ($this->conn_id === FALSE) {
$this->error("CONN.OPEN");
}
if (mysql_select_db($this->dbname, $this->conn_id) === FALSE) {
$this->error("DB.SELECT");
}
else {
$this->connected = TRUE;
}
}

public function __destruct() {
if (!$this->connected) {
$this->error("NO CONN");
}
else {
if (@mysql_close($this->conn_id) === FALSE) {
$this->error("CONN.CLOSE");
}
}
}

public function query($sql) {
if (!$this->connected) {
$this->error("NO CONN");
}
else {
$this->sql_query = $sql;
$result = mysql_query($this->sql_query, $this->conn_id);
if ($result === FALSE) {
$this->error("QUERY FAILED");
}
else {
return $result;
}
}
}

public function select($column, $table, $arg, $anzahl = NULL) {
if($arg == NULL) $sql= "SELECT ".$column." FROM ".$table;
else $sql= "SELECT ".$column." FROM ".$table." WHERE ".$arg;
if (!$this->connected) {
$this->error("NO CONN");
}
else {
$result = $this->query($sql);
if ($result !== FALSE) {
$anzahl1 = mysql_num_rows($result);
$anzahl = $anzahl1;
for($i = 0; $i < $anzahl; $i++) {
$daten[$i] = mysql_fetch_object($result);
}
return $daten;
}
}
}

}

class User
{
private $sql = NULL;
private $user_name;

public function __construct($sgl) {
$this->sql = $sql;
}

public function CheckUserName($user_name) {
$this->user_name = $user_name;
$column = "user_name";
$table = "user";
$arg = "'user_name=".$user_name."'";
$result = $this->sql->select($column, $table, $arg, $anzahl = NULL);
return $result;
}
}

$user = new User(new DBMySQL());
$user_name = "Mark";
$result = $user->CheckUserName($user_name);
if(array_count_values($result)>0) echo "Dieser Username ist noch nicht vergeben !";

[php]

Vielen Dank !

Mit freundlichen Grüßen,

Mark Taylor

Geändert von Mark Taylor (14.09.2008 um 19:52 Uhr).
Mark Taylor ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 14.09.2008, 19:27  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.255
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Hallo, willkommen.

Bitte editiere Deinen Beitrag und nutze [php] Tags für den Code.


Zitat:
Wieso übergibt der Interpreter bei : $user = new User(new DBMySQL());
nicht die Referenz an den Konstruktor der User-Klasse ?
Hast Du das denn im Konstruktor überprüft?
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 14.09.2008, 19:28  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.255
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Schau Dir das mal an.
Fällt Dir was auf? Tipp: Parametername....

PHP-Code:
public function __construct($sgl) {
$this->sql $sql;

__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 14.09.2008, 19:51  
Neuer Benutzer
 
Registriert seit: 14.09.2008
Beiträge: 2
Mark Taylor befindet sich auf einem aufstrebenden Ast
Standard

Vielen Dank für die schnellen Antworten. Habe mir schon gedacht, das es etwas ganz simples ein muss. Danke für den Hinweis auf diesen Flüchtigkeitsfehler. Ich habe mir das tausendmal durch gelesen und keine Fehler entdeckt. Wenn man zu lange daran sitzt wird man blind für so was.
Nochmals vielen Dank und schönen Abend noch !

Beim nächsten mal benutze ich [php] zum Kennzeichnen des Codefragmentes.

Lieben Gruß, Mark
Mark Taylor ist offline  
Alt 14.09.2008, 20:38  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

--war falsch, gelöscht--
David ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

LinkBacks (?)
LinkBack to this Thread: http://www.php.de/php-tipps-2008/47435-fehlermeldung-call-member-function-foo-non-object.html
Erstellt von For Type Datum
Fehlermeldung : Call to a member function foo() on a non-object (://URLFAN) This thread Refback 22.10.2008 13:13

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Call to a member function sQuery() on a non-object pappacoretex PHP-Fortgeschrittene 11 22.09.2008 17:23
Call to a member function on a non-object campinge PHP Tipps 2008 1 18.08.2008 02:31
[Erledigt] Fatal Error:&quot;Call to a member function on a non-object&quot; Floyd PHP Tipps 2008 4 15.08.2008 13:35
Call to a member function ... on a non-object funnx PHP Tipps 2008 6 29.07.2008 18:08
Fatal error: Call to a member function on a non-object tweek PHP Tipps 2008 13 25.06.2008 12:56
Fatal error: Call to a member function on a non-object atom-dragon PHP Tipps 2007 20 02.12.2007 22:22
Call to a member function on a non-object Riks PHP Tipps 2007 20 10.02.2007 22:59
Problem Call to a member function on a non-object PHP Tipps 2005 5 24.05.2005 19:14
Call to a member function on a non-object PHP Tipps 2005 12 24.05.2005 04:06
Fatal error: Call to a member function on a non-object PHP Tipps 2005 7 13.04.2005 07:24
update auf php 5.0.4 robo47 Server, Hosting und Workstations 6 10.04.2005 19:00
Fatal error: Call to a member function on a non-object PHP Tipps 2005 15 04.02.2005 13:02
Fatal error: Call to undefined function: imagecreatefromjpeg DannyD PHP-Fortgeschrittene 10 05.12.2004 21:59
Call to a member function on a non-object --&amp;gt; WARUM ? PHP Tipps 2004-2 4 25.11.2004 20:16
[Erledigt] Fatal error: Call to undefined function:... PHP Tipps 2004 8 27.06.2004 12:56

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
cannot call member function without object, call to a member function sql_query() on a non-object in, call to a member function sql_query() on a non-object, call to a member function aliasnbpages() on a non-object, call to a member function open() on a non-object, call to a member function, http://www.php.de/php-tipps-2008/47435-fehlermeldung-call-member-function-foo-non-object.html, fatal error: call to a member function query() on a non-object in, error: cannot call member function without object, call to a member function sql_pconnect() on a non-object, call to a member function open() on a non-object in, php call to a member function query() on a non-object, fatal error: call to a member function mark() on a non-object in, cannot call member function, joomla \call to a member function mark() on a non-object\, fatal error: call to a member function query() on a non-object, function foo, call to a member function querybypoint() on a non-object, call to a member function plainmailencoded() on a non-object, call to a member function mark() on a non-object

Alle Zeitangaben in WEZ +1. Es ist jetzt 19:05 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum