php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 30.11.2009, 13:33  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard Mysql-Klasse in einer Login-KLasse anwenden

Hallo Leute,

ich bin mal wieder ein wenig dabei mit OOP zu probieren, das ist sicher noch nciht OOP wie ihr das anwendet, aber naja ich versuche erst mal dahinter zu steigen.

Also ich habe eine Mysql Klasse gebastelt die soweit auch funktioniert, habe auf der index.php mal einen Testeintrag gemacht und der war erfolgreich.

Dann habe ich eine Klasse die das login abhandeln soll und da drin wende ich auch die mysql Klasse an und da kommt das Problem ich bekomme auf der index.php wo ich alles einbinde diese Fehler.

Code:
Notice: Undefined variable: dbHost in C:\xampp\htdocs\ooptests\login\login_class\login.class.php on line 43

Notice: Undefined variable: dbUser in C:\xampp\htdocs\ooptests\login\login_class\login.class.php on line 43

Notice: Undefined variable: db in C:\xampp\htdocs\ooptests\login\login_class\login.class.php on line 43

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\xampp\htdocs\ooptests\login\db_classes\mysql_connect_class.php on line 21
keine verbindung zur DB
Die Fehler kommen aber nur im Zusammenspiel mit der Login Klasse.

Hier meine mysql Klasse, die liegt im Verzeichniss db_classes.

PHP-Code:
<?php
/*
*
* mysql verbindungsklasse
*
*/
class Db{
 
 private 
$db_connect;
 private 
$db_close;
 private 
$db_query;
 private 
$db_fetch;
 
 
/*
 *
 * constructor
 *
 */
 
public function __construct($dbHost,$dbUser,$dbPw,$db){
  
  
$this->db_connect mysql_connect($dbHost,$dbUser,$dbPw);
  
  if(!
$this->db_connect){
   
   die(
mysql_error().'keine verbindung zur DB'.$this->db_connect); 
  }
  
  
mysql_select_db($db,$this->db_connect)or die(mysql_error().'keine db gefunden');
  
  
$this->db_query NULL;
  
  
$this->db_fetch NULL;
 }
 
 
/*
 *
 * erstellen des query aufbaus
 *
 */
 
public function DbQuery($query_var){
  
  
$this->db_query mysql_query($query_var);
  
  if(!
$this->db_query){
   
   die(
mysql_error().' -> Fehler beim ausführen des Mysql Querys!'.$query_var.' <-');
  }
  else{
   
   return 
$this->db_query;
  }
 }
 
 
/*
 *
 * mysql fetch auf assoc ausführen
 *
 */
 
public function DbFetch(){
  
  
$this->db_fetch mysql_fetch_assoc($this->db_query);
  
  return 
$this->db_fetch;
 }
 
 
/*
 *
 * datenbank sitzungs vorgang wieder beenden
 *
 */
 /*public function __destruct(){
  
  mysql_close($this->db_connect);
 }*/
}
?>
Dann hier die Klasse für das Login, die liegt im Verzeichnis login_class.

PHP-Code:
<?php
/*
*
* klasse für die login / logged_in / logout funktionen
*
*/
class Logged{
 
 
/*
 *
 * @param username
 *
 */
 
private $username;
 
 
/*
 *
 * @param pwd
 *
 */
 
private $pwd;
 
 
/*
 *
 * @param $userId
 *
 */
 
private $userId;
 
 
/*
 *
 * constructor 
 *
 */
 
public function __construct(){
  
  
$this->username NULL;
  
  
$this->pwd NULL;
  
  
$this->userId 0;
  
  
$this->db_handle = new Db($dbHost,$dbUser,$dbPw ='',$db);
 }
 
 
/*
 *
 * methode die den login vorgang abhandelt
 *
 */
 
public function checkLogin($user,$pw){
  
  
$loginSql "
     Select
      id,
      username,
      pwd
     From
      user
     Where
      username ="
.mysql_real_escape_string($this->usernmae)."
     AND
      pwd ="
.mysql_real_escape_string(md5($this->pwd))."
     "
;
  
  
//query an db schicken
  
$login $this->db_handle->DbQuery($loginSql);
  
  
//einen fetch erstellen
  
$logFetch $this->db_handle->DbFetch($login);
  
  
//prüfen ob daten richtig sind
  
if($logFetch['username'] == $this->username && $logFetch['pwd'] == $this->pwd){
   
   
$this->userId $_SESSION['id'];
   
   
//wenn login erfolgreich dann log feld auf 1 setzen
   
$updateLog ="
      Update
       user
      Set
       log = 1
      Where
       id ="
.intval($this->userId)."
      "
;
      
   
$updateLogQuery $this->db_handle->DbQuery($updateLog);
   
   
  }
  else{
   
   return 
false;
  }
 }
}
 
?>
Und zu guter letzt die index.php die liegt im Hauptverzeichnis login.

PHP-Code:
<?php
//error reporting aufrufen
error_reporting(E_ALL);
ini_set('display_errors'true);
//session starten
session_start();
/*
*
* einbinden der config datei
*
*/
require_once('config/conf.php');
/*
*
* einbinden der klasse für das DB handling
*
*/
require_once('db_classes/mysql_connect_class.php');
/*
*
* einbinden der logged klasse
*
*/
require_once('login_class/login.class.php');
/*
*
* aufrufen der datenbank klasse
*
*/
$db_handle = new Db($dbHost,$dbUser,$dbPw ='',$db);

/*
*
* aufrufen der login klasse
*
*/
$logged = new Logged();
$login $logged->checkLogin($_POST['username'],$_POST['pwd']);
include(
'login_form.php');
?>
Ich verstehe nicht warum da diese Fehlermeldungen geworfen werden, jedoch als ich die Datenbankklasse einzeln für einen Eintrag auf der Index nutzt klappte das.

Danke für eure Hilfe, denn ich weis nicht was ich da falsch mache.

Mfg litter
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 30.11.2009, 13:37  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.240
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Ähnlich einer Funktion bist du mit einer Klasse auch in einem eigenen Namensraum, was Variablen angeht. Sprich: Du hast innerhalb __construct keinen Zugang zur Variable $dbHost, diese wurde woanders definiert (nämlich im globalen Namensraum).

Es ist auch vom Design her fragwürdig, den DB-Connect in der Login-Klasse zu machen. Kurze Lösung: Mache den DB-Connect bereits direkt nach der Deklaration der Klasse DB. Speichere das in einer globalen Variable (beispielsweise $dbconn) und greife via globals drauf zu.
Schritt 2: Beschäftige dich damit, was ein Singleton ist und wie du das nutzen kannst, um auf deine Datenbank-Verbindung von allen anderen Klassen ausgehend zuzugreifen.
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist offline  
Alt 30.11.2009, 13:39  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

PHP-Code:
 public function __construct(){
  
  
$this->username NULL;
  
  
$this->pwd NULL;
  
  
$this->userId 0;
  
  
$this->db_handle = new Db($dbHost,$dbUser,$dbPw ='',$db);
 } 
$dbHost, $dbUser und $db sind hier unbekannt (wo das ist, kannst du der Fehlermeldung entnehmen)
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline  
Alt 30.11.2009, 13:46  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.240
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Wo ichs gerade sehe. Der Ausdruck, den du da fürs Passwort verwendest hast, ist völlig sinnlos und sinnfrei. Dadurch wird das Passwort explizit geleert und zwar immer, egal ob da vorher was drin stand oder nicht.
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist offline  
Alt 30.11.2009, 13:51  
Erfahrener Benutzer
 
Registriert seit: 05.02.2009
Beiträge: 1.401
PHP-Kenntnisse:
Fortgeschritten
Destruction ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Sorry... hatte was übersehen
__________________
"Dummheit redet viel..Klugheit denkt und schweigt.." [Amgervinus]
Destruction ist offline  
Alt 30.11.2009, 13:54  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

DAs die Variablen da unbekannt sind, dass weis ich, steht ja in der Fehlermeldung, ich verstehe grad nicht ganz warum.

Denn hier in der index.php wird ja der connect ausgeführt.

PHP-Code:
$db_handle = new Db($dbHost,$dbUser,$dbPw ='',$db); 
Ich werde mal nach Single Ton Googeln.
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline  
Alt 30.11.2009, 14:16  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.240
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Ein Wort. Singleton. Nicht "Single Ton". Also nicht "Einzelner Ton".

Ansonsten: Der Fehler taucht aber nicht in der index.php auf sondern woanders. In der index.php sind die Variablen auch bekannt. Du kriegst den gleichen fehler bei folgendem Beispiel:
PHP-Code:
$foo 'Hello World!<br />';

echo 
$foo;

function 
bar()
{
    echo 
$foo;
}
bar(); 
Variablen haben einen Bezugspunkt. In deiner index.php ist der Bezugspunkt der lobale Namensraum. In der unktion "bar" ist der Bezugspunkt die Funktion selbst und NICHT der globale Namensraum. Daher ist die Variable unbekannt. In der Funktion __construct der Klasse ist der Bezugspunkt die Funktion __construct der Klasse und ebenfalls NCIHT der globale Namensraum.
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist offline  
Alt 30.11.2009, 14:17  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Gültigkeitsbereiche von Variablen sollten dich interessieren - Variablen, die innerhalb von Funktionen benutzt werden, müssen innerhalb der Funktion deklariert oder als Parameter übergeben werden.
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline  
Alt 30.11.2009, 14:54  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Ich weis was es mit dem Gültigkeitsbereich von Variablen auf sich hat und mit normalen Funktionen habe ich auch keine Probleme, habe ich mir genug geschrieben, aber in Sachen OOP klemmt bei mir einfach der Schuh.
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline  
Alt 30.11.2009, 14:56  
Erfahrener Benutzer
 
Registriert seit: 26.10.2009
Beiträge: 425
PHP-Kenntnisse:
Fortgeschritten
Yoshi- befindet sich auf einem aufstrebenden Ast
Standard

Bei OOP ist es doch genau so.
Such einfach nach den Singleton pattern bzw registry und du wirst dein Problem auf einen guten Weg lösen können.
Yoshi- 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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Problem mit mySQL Klasse Thek PHP Tipps 2009 3 13.07.2009 23:06
[Erledigt] Login mit gleichzeitiger änderung von daten in MySQL Tabelle ?? kreativepassion PHP Tipps 2009 6 15.06.2009 22:22
[Erledigt] Kann keine Umlaute im mysql client eingeben Oger Datenbanken 9 02.04.2009 11:54
MySQL Konsole und Umlaute unter Windows [LÖSUNG] f4ckm5 Datenbanken 8 30.03.2009 22:10
MySQL Klasse Gödda PHP Tipps 2009 8 17.02.2009 01:56
mySQL - Login über Datenbank - Fehler zwerg PHP Tipps 2005-2 3 25.09.2005 17:57
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
Habe Mysql KLasse geschrieben, aber... Spike_php PHP-Fortgeschrittene 10 27.03.2005 09:15
MYSQL root login und logging Problem Datenbanken 2 16.03.2005 08:41
[Erledigt] problem mit login skript | mysql | cookie PHP Tipps 2004-2 13 07.12.2004 19:01
login mit MySQL PHP Tipps 2004-2 15 25.11.2004 10:20
fragen zu einem Login und Zeit blabla über MySQL PHP Tipps 2004 10 12.09.2004 15:21
PHP mysql problem beim login. c01001 PHP Tipps 2004 8 05.08.2004 15:57
php login mit mysql c01001 PHP Tipps 2004 2 04.08.2004 21:30
[Erledigt] PHP5 &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;a m p; MySQL Datenbanken 5 01.08.2004 05:47

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
http://www.php.de/php-einsteiger/61802-mysql-klasse-einer-login-klasse-anwenden.html, login class php, php mysql login class, php5 db_connect, php class mysql in funktionen benutzen, mysql klasse login, php login klasse, php login klassen, php5 mysql klasse, php session_start mysql_connect class, php5 login klasse, php mysql login oop, db_fetch, php login class, mysql klasse, notice: undefined variable: class private, php class mysql zugangsdaten globale config, php5 db_connect.inc, php login vorgang mysql, php 5 db_connect

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:46 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