php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.10.2007, 13:51  
Neuer Benutzer
 
Registriert seit: 03.10.2007
Beiträge: 4
Leisurelarry
Standard PHP + MySQL zwei Instanzen vertragen sich nicht

Hallo liebes Forum,

ich weiß nicht genau, ob ich hier in der richtigen Abteilung des Forums gelandet bin, aber ich versuche es mal.

Also:

Ich habe eine Datenbankklasse DBSQL, die die Zugriffe und den Connect auf die Datenbank regelt. Und dann habe ich zwei abgeleitete Klassen, die jeweils Funktionen für spezielle Zwecke beinhalten.

PHP-Code:
//Datenbankzugriffe

Class DBSQL
{
     
   function 
DBSQL($DBName)
   {     
      global 
$DBHost,$DBUser,$DBPassword;
      
$conn=mysql_connect($DBHost,$DBUser,$DBPassword);
      
mysql_select_db($DBName,$conn); 
      
$this->CONN $conn;
      return 
true;
   }
   
//usw. usw.

PHP-Code:
//Klasse für Gästebuch DB Zugriffe

Class GBSQL extends DBSQL
{
   
// Konstruktor
   
   
function GBSQL($DBName "")
   {
      
$this->DBSQL($DBName);
   }

// neuer Eintrag
function gb_entry_new($author,$site,$email,$location,$content,$approved,$adddate,$ip)
   {        
      
$sql "insert into gb_eintrag(author,site,email,location,content,approved,adddate,ip) values 
     ('$author','$site','$email','$location','$content','$approved','$adddate','$ip')"
;      
      
$results $this->insert($sql);
      return 
$results;
   } 
//usw. usw.

PHP-Code:
//Klasse für Newsboard DB Zugriffe

Class NewsSQL extends DBSQL
{
   
//Konstruktor
   
function NewsSQL($DBName "")
   {
      
$this->DBSQL($DBName);
   }

   function 
getchildcatalog($catid)
   {
      
$start $page*$record;
      
$sql "select catalogid,catalogname from catalog where parentid='$catid' order by catalogid";
      
$result $this->select($sql);
      return 
$result;
   }
//usw. usw.


Diese Klassen befinden sich in inc Dateien und werden über require dort eingebunden, wo sie gebraucht werden. Dort heißt es dann z.B.

PHP-Code:
require_once("./gb_sql_inc.php"); //Zugriffsfunktionen Gästebuch
$db_gb = new GBSQL($DBName); 
es wird also eine Instanz der Klasse GBSQL erzeugt. Das funktioniert einwandfrei und ich kann dann über

PHP-Code:
$rc $db_gb->gb_entry_new(....); 
meine Funktion aufrufen.

PHP-Code:
require_once("./NewsSql.inc.php"); //Zugriffsfunktionen News
$db_news = new NewsSQL($DBName); 
funktioniert ebenfalls, jedenfalls solange es auf der gleichen Seite keine Instanz der Klasse GBSQL gibt. Wenn es aber eine Instanz der Klasse GBSQL und eine Instanz der Klasse NewsSQL gibt, bekomme ich eine Fehlermeldung "Can't redefine Class DBSQL..." und ich weiß nicht, warum. Zur Zeit behelfe ich mich damit, dass ich zwei verschiedene Zugriffsklassen verwende - die Klasse DBSQL unter dem Namen DBSQL_2 noch mal vorhalte. Das geht ist aber unbefriedigend.
Mein Ziel ist es, mit nur einer Klasse DBSQL sowohl das Gästebuch als auch die Newsseite und womöglich andere Seiten zu versorgen und ich möchte die Gästebuchfunktionen und die Newsfunktionen nicht in der gleichen Klasse haben.

Für nützliche Hinweise wäre ich sehr dankbar.

Schönen Gruß

Rudolf


Edit by nikosch77
Ist doch gleich viel übersichtlicher. Bitte in Zukunft die passenden BBTags nutzen. Sonst droht Mecker.
.
Leisurelarry ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 03.10.2007, 14:56  
Erfahrener Benutzer
 
Registriert seit: 17.01.2006
Beiträge: 468
Slava
Standard

welche php version hast du?
__________________
Slava
http://bituniverse.com
Slava ist offline  
Alt 03.10.2007, 17:57  
Neuer Benutzer
 
Registriert seit: 03.10.2007
Beiträge: 4
Leisurelarry
Standard

Hallo Slava,

zu Testzwecken habe ich mir auf dem heimischen Rechner eine XAMPP Umgebung geschaffen. Die Versionen:

XAMPP für Windows Version 1.6.3a
PHP 5.2.3

Aber langfristig sollen die Seiten natürlich im Internet stehen und mein Provider benutzt PHP 4.4.4. in einer Linux Umgebung. Dort habe ich aber noch nicht getestet, bzw. nur die Newsseite und die funktioniert einwandfrei.

Hängt die Instanzierung denn von der PHP Version ab?

Gruß

Rudolf
__________________
Machines were mice and men were lions once upon the time.
But now that is the opposite, it's twice upon the time.

Moondog
Leisurelarry ist offline  
Alt 03.10.2007, 18:26  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Hallo Leisurelarry und Willkommen im Forum.

Die eigentlich relevante Info verschweigst Du uns. Wo wird denn das File mit der DBSQL Klasse eingebunden. Sollte dies in beiden inc Dateien jeweils mit require () oder include () passieren dürfte das Rätsel wohl gelöst sein.
nikosch ist gerade online  
Alt 03.10.2007, 18:32  
Erfahrener Benutzer
 
Registriert seit: 17.01.2006
Beiträge: 468
Slava
Standard

also verhalten von Objecten in php4 und php5 ist ganz anderes, da in php5 alle Objecte mit referenze arbeiten.
so direkt kann ich kein fehler in deinem code entdecken.
aufruf von constructor in subclasse muss du am bestens mit 'parent::' statt $this machen.
im fall, wenn du error_reporting(E_ALL); nicht eingeschaltet hast, dann mach das bitte. Das hilft sehr bei debugen.

und trenne bitte deine code im forum mit
PHP-Code:
... 
damit es besser lesbar wird.
__________________
Slava
http://bituniverse.com
Slava ist offline  
Alt 03.10.2007, 20:19  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Ich weiß gar nicht Slava, weshalb Du auf die Objektreferenz eingehst. Die Fehlermeldung hat doch wohl eindeutig mit einem doppelten include zu tun:

Code:
"Can't redefine Class DBSQL..."
@LL: Nutze ein Include für die Elternklasse vor Einbinden der beiden abgeleiteten, arbeite mit require_once () oder schreib Dir eine Verwaltung für Deine Module.
.
nikosch ist gerade online  
Alt 03.10.2007, 21:24  
Neuer Benutzer
 
Registriert seit: 03.10.2007
Beiträge: 4
Leisurelarry
Standard

Hallo liebe Leute,

das ging ja wirklich sehr schnell und qualifiziert. Vielen Dank an Euch beide. Tatsächlich war es ein doppeltes require, das die Fehlermeldung verursacht hat. Eine Ebene weiter unten (bei den abgeleiteten Klassen) hatte ich es richtig, nämlich mit require_once.
Dafür, dass ich den Text und den Code nicht optisch getrennt habe, bitte ich um Vergebung, ich hatte gar nicht gesehen, dass das bei diesem Editor geht, danke für den Hinweis - nun weiß ich es und gelobe Besserung für die Zukunft.

Ein Wort noch zum Forum. Ich finde es sehr schön, dass hier diejenigen, die ihren Senf zu allem dazugeben müssen, anscheinend fehlen.Hoffentlich bleibt das so. Dann komme ich ganz bestimmt wieder. In einem anderen Forum hätte ich auf meine Frage entweder nur technoides Geschwätz, nichtssagende Verweise oder so geistreiche Gegenfragen wie: Warum machst Du es nicht einfach mit Flatfiles? als Antwort bekommen...

Schönen Gruß und vielen Dank

Rudolf
Leisurelarry ist offline  
Alt 03.10.2007, 21:54  
Erfahrener Benutzer
 
Registriert seit: 17.01.2006
Beiträge: 468
Slava
Standard

Zitat:
Ich finde es sehr schön, dass hier diejenigen, die ihren Senf zu allem dazugeben müssen, anscheinend fehlen
abwarten
kommt noch.

@nikosch77
ja, du hast recht. Die fehlermeldung ist mir irgenwie unbekannt vorgekommen. vermutlich weil ich fast immer requeire_once bzw include_once verwende bin ich noch nie (bzw sehr sehr lange ) so eine fehlermeldung gehabt.
__________________
Slava
http://bituniverse.com
Slava ist offline  
Alt 03.10.2007, 22:40  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Zitat von Leisurelarry
In einem anderen Forum hätte ich auf meine Frage entweder nur technoides Geschwätz, nichtssagende Verweise oder so geistreiche Gegenfragen wie: Warum machst Du es nicht einfach mit Flatfiles? als Antwort bekommen...
Tja schon schei**e wenn sich Leute mit Knowhow professionell um deine Probleme kümmern um dir mal über den Tellerrand zu helfen nicht wahr?
Zergling-new ist offline  
Alt 04.10.2007, 10:58  
Neuer Benutzer
 
Registriert seit: 03.10.2007
Beiträge: 4
Leisurelarry
Standard

Ach Slava,

ich fürchte Du hast recht...

Rudolf
__________________
Machines were mice and men were lions once upon the time.
But now that is the opposite, it's twice upon the time.

Moondog
Leisurelarry 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] MySQL - ERROR 1044 bei erstellen einer Datenbank _youngenterpriser_ Datenbanken 2 05.02.2008 17:56
Mysql Server Einstellunen Optimieren pchero Datenbanken 3 01.05.2007 19:50
[Erledigt] MYSQL Problem Datenbanken 4 09.02.2006 15:14
Kein Zugriff über ODBC mit der IP-Adresse auf MySql DB Datenbanken 4 09.02.2006 11:04
[Erledigt] Mysql 4.1.x unter php 4.3.9 Datenbanken 3 15.11.2005 13:49
Schnittstelle zwischen PHP und MySQL klappt net !!! Datenbanken 16 16.10.2005 14:24
[Erledigt] not allowed to connect to this MySQL server PHP Tipps 2005-2 2 23.09.2005 18:34
mysql_result(): supplied argument is not a valid MySQL PHP Tipps 2005-2 4 25.08.2005 14:44
[Erledigt] MySQL Befehl für MySQL 4.0.24 Datenbanken 2 23.08.2005 17:35
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
MYSQL läuft nur wenn /tmp auf 777 Datenbanken 5 06.07.2005 08:38
mysql root passwort vergessen Datenbanken 1 29.05.2005 11:33
Access denied for user: '@localhost' / SYSTEM@localhost Datenbanken 0 10.11.2004 20:35
MySQL Erweiterungen nicht gefunden Datenbanken 4 27.08.2004 23:53
[Erledigt] PHP5 &a m p; MySQL Datenbanken 5 01.08.2004 05:47

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php zwei instanzen, mysql zwei instanzen, lion xampp datenbankzugriff, klasse subclasse mysql_connect, machines were mice and men were lions once upon a time, but now that it\'s the opposite it\'s twice upon a time.

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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.