DB Fehler beim Inculden

ScarFace01

19.02.2011 - 22.19
ID: 83851
L
7 April 2007
336
42
Folgendes Problem:

Ich habe meine Index.php bei der schon so manche Sachen aus der DB gelesen werden. In der Index.php habe ich ganz oben aber auch bereits die Config.php und Header.php inculded.

Include("config.php");
Include("Header.php");

Das klappt auch alles weil ich bei den genannten PHP Datein keine DB Abfragen habe.

Wenn ich nun aber noch die Check.php includen möchte, die ja selber auch viele DB Anfragen macht, komt ein Fehler, dass die DB bereits verbunden oder bearbeitet wird.

Kann ich das umgehen?
 
Er wird wohl kaum eine Klasse benutzen...

Mache dir mal den Unterschied zwischen include(); und include_once(); klar.

Ich denke du möchtest die Datei nur einmal einfügen und die Variablen nicht überschreiben. include_once("config.php");


Singeton Pattern

PHP:
<?php
    class Foo
    {
        protected static $_instance = null;
        private function __construct() 
        {
            //...
        }
        
        public static function getInstance()
        {
            if(!(self::$_instance instanceof self))
                self::$_instance = new self();
            
            return self::$_instance;
        }
       
        private function  __clone() {}


       //...

    }
?>
 
Hmm, stimmt. :doh:
Ausser er unterdrückt die Fehler. :biggrin:

Aber ohne den Inhalt der einzelnen Dateien lässt sich nur spekulieren.
 
Er wird wohl kaum eine Klasse benutzen...
Weiß ich nicht. Und ich hab keine Lust auf Ratespielchen. Programmieren ist nun mal nicht Rumraten, sondern denken, testen, debuggen, Manual lesen/auswendig können.

Meine Antwort ist zumindest passend.
komt ein Fehler, dass die DB bereits verbunden oder bearbeitet wird
Ich hab noch nie so'n komischen Fehler gesehen und wenn, dann hat er ihn selber fabriziert und könnte auch dann mehr Infos geben :roll:

An mehrfachen Include hab ich auch gedacht, aber mit Obigem hätte die Fehlermeldung dann nicht viel gemein.
 
Ja, und es is schade, wenn man dann einen riesen Thread hat, wo jeder seine Vermutung mit (Teil-)Lösung postet und am Ende liegen sie doch alle falsch.
 
Also die Fehlermeldung die kommt lautet:

Fatal error: Cannot redeclare connect() (previously declared in /srv/www/httpd/phost/w/de/webhost/domain/web/index.php:8) in /srv/www/httpd/phost/w/de/webhost/domain/web/check.php on line 11

Und kommt auch nur, wenn eine Datei die Included wird auch die DB anspricht sowie die Datei die die anderen datein Included.

So mach ich das:
PHP:
function connect(){
  require "mysql.php";
  $db=mysql_connect($host, $db_user, $db_pw);
  mysql_select_db($db_name);
  return $db;
}

$db=connect();

Das steht bei meinen Datein die mit der DB arbeiten immer ganz oben.

Ist das etwa nicht gut? bzw. nicht richtig?
 
Du meinst also in etwa folgendes(?):

Ich habe meine index.php wo ich die oben genannte DB Funktion raus nehme und sie in die funktion.php rein schreibe.

Ich habe dann als Beispiele jetzt noch folgende Datein, in denen auch diese DB Funktion drin steht und ich sie deshalb nicht in der index.php includen kann:
- check.php
- menu.php
- user.php
- shop.php

Wenn ich jetzt die oben genannte Funktion nur noch in der funktion.php habe und diese dann in sämtlichen Datein include, kann ich diese Datein dann auch wieder in der index.php includen?

Wäre ja schön und einfacher für mich aber ich glaube, dass das so sicherlich nicht klappt oder?
 
Was soll denn an dem require falsch sein? require ist meines Verständnisses nach keine eigentliche Funktion, sondern vielmehr ein Sprachkonstrukt von PHP mit speziellen Eigenschaften. Ich persönlich benutze die Klammern (falls es darum geht) nie, da es in meinen Augen so viel lesbarer ist.

Und: Die Doku zu require verweist direkt auf include und guck Dir da mal die ganzen Beispiele an... ;)
 
Grundsaetzlich libraries immer mit require_once einbauen, sonst hat man solche Fehler, dass funktionen doppelt deklariert werden und Daten mehrfach initialisiert werden (siehe das DB-connect).