Thema: Probleme mit include
-
11.03.09 17:21 #1
- Registriert seit
- Nov 2007
- Beiträge
- 7
Guten Tag!
Ich hab ein Problem. Bin ein Anfänger, bitte nicht gleich steinigen, wenn das alles noch etwas wirsch ist. Ich hab eine Funktion geschrieben, die verschiedene Dateien implementieren soll (siehe Anhang). Dies tut sie auch (angeblich Rückgabewert) nur wird mir dann leider diese Fehlermeldung ausgegeben:
Fatal error: Call to a member function query() on a non-object in xxx/functions.php on line 15
line15:Code :1
$fetch_db = $con->query($select_sql)->fetch_assoc();
$con ist in mysql_connect.php definiert. Diese Datei wird mit meiner eigenen include-Funktion implementiert und sollte ab da an ja eigentlich verfügbar sein:
Code :1 2
$con = new mysqli($host, $user, $pass, $db); // Verbindungsdaten sind in mysql_user.php global $con;
Ich dachte erst, dass irgendwelche Dateien nicht richtig includet werden, aber meine Funktion gibt dies aus:
constants.php implementiert.
1
mysql_user.php implementiert.
1
mysql_connect.php implementiert.
1
functions.php implementiert.
1
Ich habe sie so aufgerufen:
Code :1 2
include '../confidential/include.php'; include_data('constants', 'mysql_user', 'mysql_connect', 'functions');
Und hier ist mal meine Funktion:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
<?php function include_data($constants, $mysql_user, $mysql_connect, $functions) { // Funktion dient zur individuellen Implementierung von Dateien. // $constants = 'constants' oder 'no_constants' // $mysql_user = 'mysql_user' oder 'no_mysql_user' // $mysql_connect = 'mysql_connect' oder 'no_mysql_connect' // $functions = 'functions' oder 'no_functions' // Konstanten if($constants == 'constants') { $ret1 = include 'constants.php'; echo "constants.php implementiert."."<br>"; echo $ret1."<br>"; } elseif($constants == 'no_constants') { // echo "constants.php nicht implementiert."."<br>"; } // Mysql-Daten if($mysql_user == 'mysql_user') { $ret2 = include 'mysql_user.php'; echo "mysql_user.php implementiert."."<br>"; echo $ret2."<br>"; } elseif($mysql_user == 'no_mysql_user') { // echo "mysql_user.php nicht implementiert."."<br>"; } // Mysql-Verbindung if($mysql_connect == 'mysql_connect') { $ret3 = include 'mysql_connect.php'; echo "mysql_connect.php implementiert."."<br>"; echo $ret3."<br>"; } elseif($mysql_connect == 'no_mysql_connect') { // echo "mysql_connect.php nicht implementiert."."<br>"; } // Funktionen if($functions == 'functions') { $ret4 = include 'functions.php'; echo "functions.php implementiert."."<br>"; echo $ret4."<br>"; } elseif($functions == 'no_functions') { // echo "functions.php nicht implementiert."."<br>"; } } ?>
Bevor ich diese Funktion benutzt habe ging alles. Habe die Dateien einfach nacheinander mit include "..." implementiert.
Nur ich dachte mir, dass so etwas vielleicht von Vorteil sein könnte, wenn später diese Dateien nicht gebraucht werden.
Wenn die ganze Idee bescheuert ist oder falls ihr eine bessere habt lasst es mich bitte wissen. Wie gesagt ich lerne im Moment und freue mich über jeden Verbesserungsvorschlag
-
Dabei hast du vielleicht den Gültigkeitsbereich (Scope) nicht beachtet.
Stelle dir dein Programm als ein Haus vor, deine Funktion ist ein verschlossener Raum davon.
In dem Raum sagst du jetzt: include "Stuhl"; und es steht ein Stuhl in dem Raum.
Das doofe ist nur das man im Haus nicht an den Stuhl dran kommt, weil der Raum zu ist und nur der Raum "weis" das in ihm ein Stuhl steht.
Führe dazu auch mal folgendes Beispiel aus:
Und hier fast das gleiche nochmal nur diesmal gibts eine "Tür zu dem Raum"PHP-Code:$text = "Hallo";
function foo()
{
$text = "Tschüss";
}
foo();
echo $text;

Am besten include nicht in einer Funktion verwenden, wenn du außerhalb der Funktion damit arbeiten willst.PHP-Code:$text = "Hallo";
function foo()
{
global $text; // Tür auf ;D
$text = "Tschüss";
}
foo();
echo $text;
Was zum lesen: http://us2.php.net/manual/de/languag...bles.scope.phpGeändert von ZodiacXP (11.03.09 um 17:47 Uhr)
Gebe keine Hilfe per PN, Mail, Instant Messenger etc.
und keine Copy&Paste-Lösungen - ein bisschen selbst nachdenken sollte drin sein. Konstruktivismus 4tw!
MfG, Zod
__________________
Google Project rpd: Rapid Web-Engineering in PHP
-
Ich glaube das global $con; musst du innerhalb der funktion machen in der du darauf zugreifen willst.
Ich teste das gleich mal.
Edit: Jo hat sich bestetigt:
das erste echo giebt eine Notice aus das zweite funktioniert.PHP-Code:<?PHP
error_reporting(E_ALL);
$Blubber="test";
global $Blubber;
function Ausgeben()
{
echo $Blubber;
global $Blubber;
echo $Blubber;
}
Ausgeben();
?>
Edit2: ohh sehe jetzt erst das Zodiac schneller war
Geändert von CraHack (11.03.09 um 17:49 Uhr)
emefge CraHack
o
L_
OL
This is Schäuble. Copy Schäuble into your signature to help him on his way to Überwachungsstaat.
Auch ein Rollstuhlfahrer kann die Menschenrechte mit Füßen treten!
Achterbahn zum Überwachungsstaat Aber es scheint ja eh keinen zu Stören...
-
11.03.09 17:51 #4
- Registriert seit
- Dec 2007
- Ort
- Bremen
- Beiträge
- 3.420
Da es nötig zu werden scheint: Ich leiste hier keinen Support über PN. Stellt Rückfragen zu Euren Problemen bitte in Eurem Thread, dann können alle helfen.
-
11.03.09 18:05 #5
- Registriert seit
- Nov 2007
- Beiträge
- 7
Hallo,
als erstmal vielen Dank für eure Aufmerksamkeit
@kuddeldaddeldu:
Der Sinn der Funktion soll sein, dass ich nicht am Anfang von jedem Skript mehrere Zeilen Includes habe. Wenn es später noch mehr Include-Dateien werden, wird der Codeblock auch immer größer.
Wenn ich nur eine include-datei mache in der ich alle anderen Dateien implementiere kann ich nicht steuern, welche ich implementiere und welche nicht.
Mit dieser Funktion würde das gehen bzw. das tut es nicht
@zodiac & crahack:
Das heißt, ich implementiere die Dateien in die Funktion, die Funktion schließt sich nach Ablauf und dann sind die implementierten Daten auch futsch?
-
11.03.09 18:16 #6
- Registriert seit
- Dec 2007
- Ort
- Bremen
- Beiträge
- 3.420
Da es nötig zu werden scheint: Ich leiste hier keinen Support über PN. Stellt Rückfragen zu Euren Problemen bitte in Eurem Thread, dann können alle helfen.
-
11.03.09 18:23 #7
- Registriert seit
- Nov 2007
- Beiträge
- 7
Code :1 2 3 4 5 6 7
<? // include.php include 'functions.php'; include 'mysql.php'; include 'xy.php'; ?>
Code :1 2 3 4 5
<? // beispiel.php include 'include.php'; ?>
So implementiere ich immer alle Dateien in include.php, auch wenn ich jetzt xy.php gar nicht implementieren will.
Ist am Anfang wahrscheinlich ziemlich egal, aber ist es nicht besser Dateien, die man eh nicht braucht, nicht zu includen, damit wenig Traffic etc. entsteht?
mfg
Disasterpiece
edit:
@zodiac und crahack:
hab mir das mit dem Geltungsbereich nun mal durchgelesen. Hat mir sehr geholfen vielen Dank nochmal
Geändert von Disasterp1ece (11.03.09 um 18:27 Uhr)
-
11.03.09 18:44 #8
- Registriert seit
- Dec 2007
- Ort
- Bremen
- Beiträge
- 3.420
Hi,
Mit Traffic hat das nichts zu tun.
Inkludiere in jedem Script genau die Dateien, die Du brauchst. Ob Du in Deinem jeweiligen Hauptscript nun einen längeren Block mit includes hast (da spricht nichts gegen), oder das in eine zugehörige Datei auslagerst, ist egal. Sich wegen sowas der Krücke "globale Variablen" zu bedienen, ist ziemlich überflüssig.
Und was hindert Dich daran, in Deiner include.php die gleiche Steuerung einzubauen, wie in dieser Funktion?
LGDa es nötig zu werden scheint: Ich leiste hier keinen Support über PN. Stellt Rückfragen zu Euren Problemen bitte in Eurem Thread, dann können alle helfen.
-
11.03.09 18:58 #9
- Registriert seit
- Nov 2007
- Beiträge
- 7
Entschuldige bitte, wenn ich auf dem Schlauch stehe, aber ich dachte ich hätte das getan, in dem ich in der include.php diese Funktion definiert habe.
Wollte dann nur noch diese augelagerte Funktion einbinden und dann im jeweiligen Hauptskript mit unterschiedlichen Parametern aufrufen.
Ich hab es nun geändert. Es funktioniert zwar nicht, aber bin schlau daraus geworden.
Danke an alle
-
11.03.09 19:04 #10
- Registriert seit
- Dec 2007
- Ort
- Bremen
- Beiträge
- 3.420
Ich meinte dieses Beispiel von Dir.
LGDa es nötig zu werden scheint: Ich leiste hier keinen Support über PN. Stellt Rückfragen zu Euren Problemen bitte in Eurem Thread, dann können alle helfen.
-
So. Vom zocken wieder da ^ ^
Das ist gut Umschrieben. Aber haste ja schon selbst herausgefunden
Um deins beizubehalten fallen mir spontan zwei Wege ein. Wenn es Klassen sind die du lädts (dürfte dir ein Begriff sein, wenn nicht -> der andere Weg), dann kannst du am Anfang von deinem Script folgendes schreiben:
Autoload wird ausgeführt wenn man eine neue Klasse instanziert die bis dahin noch unbekannt ist (letzte Zeile).PHP-Code:function __autoload($class)
{
// alles was du vorher noch machen willst...
include($class . ".php"); // so dass es den Dateinamen ergibt
// alles was danach soll...
}
$foo = new Object(); // bewirkt das Object.php geladen wird und deine sachen
Die zweite Möglichkeit wäre, du schreibst deine include.php um:
Und dort wo du Sachen einbinden willst:PHP-Code:// alles was du machen willst
include($script);
Ganz normal iterativ (nicht als Funktion) schreiben.PHP-Code:$script = "foo.php";
// sonstige deiner variablen
include("include.php");
Meiner Meinung nach, ist es überflüssig diese einfachen Sachen zu protokollieren. Zumal es die Performance (insbesondere beim letzten Vorschlag) negativ beeinträchtigt.
Aber du hast ja jetzt alles für dein Vorhaben
HF
Geändert von ZodiacXP (11.03.09 um 19:27 Uhr)
Gebe keine Hilfe per PN, Mail, Instant Messenger etc.
und keine Copy&Paste-Lösungen - ein bisschen selbst nachdenken sollte drin sein. Konstruktivismus 4tw!
MfG, Zod
__________________
Google Project rpd: Rapid Web-Engineering in PHP
![]() |
PHP 5 / MySQL 5 Seminar (22 Stunden Video-Training) Preis: früher: 39,95€ - jetzt nur: 7,99€ PHP 5 / MySQL 5 Lernkurs – 22 Stunden Video-Training auf DVD Hier geht es zum Angebot Über 1.000 weitere IT-Bücher zum Sonderpreis lieferbar! |
Ähnliche Themen
-
Probleme Schleifen und include()
Von 28dayslater im Forum PHPAntworten: 3Letzter Beitrag: 13.08.08, 13:28 -
Include probleme bei PHP5
Von Greymore im Forum PHPAntworten: 2Letzter Beitrag: 03.06.07, 16:14 -
probleme mit include
Von janosch im Forum PHPAntworten: 3Letzter Beitrag: 02.12.03, 19:37 -
Probleme mit #include <WinINet.h>
Von Simmx im Forum C/C++Antworten: 2Letzter Beitrag: 07.11.03, 15:24 -
Probleme mit include
Von Oli im Forum PHPAntworten: 5Letzter Beitrag: 09.06.02, 15:59



Zitieren

Login





Lesezeichen