|
|
| |
| |
Hallo und herzlich willkommen! Tutorials.de ist eine Hilfe-Community mit dem Motto User helfen Usern. Als Gast verfügst Du über Schreibrechte in unseren Foren und Blogs. Du kannst dich aber gerne auch kostenlos registrieren und Teil unserer Gemeinschaft werden! Viel Spaß & Erfolg bei der Vermehrung deines Wissens :-)
|
|
|
 |
|
|
|
|
|
|
11.03.09, 17:21
|
#1 (permalink)
|
|
Rookie
Registriert seit: Nov 2007
Beiträge: 7
Renommee-Modifikator: 0
|
Probleme mit include
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:
|
$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:
|
$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:
|
include '../confidential/include.php';
include_data('constants', 'mysql_user', 'mysql_connect', 'functions');
|
Und hier ist mal meine Funktion:
|
Code:
|
<?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 
|
11.03.09, 17:39
|
#2 (permalink)
|
Registriert seit: Mar 2004
Beiträge: 1.743
|
AW: Probleme mit include
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:
|
PHP-Code:
|
|
$text = "Hallo";
function foo() { $text = "Tschüss"; }
foo(); echo $text;
|
Und hier fast das gleiche nochmal nur diesmal gibts eine "Tür zu dem Raum"
|
PHP-Code:
|
|
$text = "Hallo";
function foo() { global $text; // Tür auf ;D
$text = "Tschüss"; }
foo(); echo $text;
|
Am besten include nicht in einer Funktion verwenden, wenn du außerhalb der Funktion damit arbeiten willst.
Was zum lesen: http://us2.php.net/manual/de/languag...bles.scope.php
__________________
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
__________________
Mein System: Hamster 120 Herz p.M., Windows 3.1, 128 Megabären aufm Einrad
Geändert von ZodiacXP (11.03.09 um 17:47 Uhr).
|
11.03.09, 17:44
|
#3 (permalink)
|
|
Mitglied Silber
Registriert seit: Sep 2004
Beiträge: 94
Renommee-Modifikator: 12
|
AW: Probleme mit include
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:
|
PHP-Code:
|
|
<?PHP error_reporting(E_ALL);
$Blubber="test"; global $Blubber;
function Ausgeben() { echo $Blubber; global $Blubber; echo $Blubber; }
Ausgeben();
?>
|
das erste echo giebt eine Notice aus das zweite funktioniert.
Edit2: ohh sehe jetzt erst das Zodiac schneller war 
__________________
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...
Geändert von CraHack (11.03.09 um 17:49 Uhr).
|
11.03.09, 17:51
|
#4 (permalink)
|
|
Mitglied Diamant
Registriert seit: Dec 2007
Ort: Bremen
Beiträge: 3.422
|
AW: Probleme mit include
Hi,
Zitat:
Zitat von Disasterp1ece
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 
|
Der Sinn erschließt sich mir überhaupt nicht. Binde die Dateien da und dann ein, wo und wann sie gebraucht werden.
LG
__________________
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 (permalink)
|
|
Rookie
Registriert seit: Nov 2007
Beiträge: 7
Renommee-Modifikator: 0
|
AW: Probleme mit include
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 (permalink)
|
|
Mitglied Diamant
Registriert seit: Dec 2007
Ort: Bremen
Beiträge: 3.422
|
AW: Probleme mit include
Hi,
Zitat:
Zitat von Disasterp1ece
Wenn ich nur eine include-datei mache in der ich alle anderen Dateien implementiere kann ich nicht steuern, welche ich implementiere und welche nicht.
|
Warum nicht?
LG
__________________
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 (permalink)
|
|
Rookie
Registriert seit: Nov 2007
Beiträge: 7
Renommee-Modifikator: 0
|
AW: Probleme mit include
|
Code:
|
<?
// include.php
include 'functions.php';
include 'mysql.php';
include 'xy.php';
?>
|
|
Code:
|
<?
// 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 (permalink)
|
|
Mitglied Diamant
Registriert seit: Dec 2007
Ort: Bremen
Beiträge: 3.422
|
AW: Probleme mit include
Hi,
Zitat:
Zitat von Disasterp1ece
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?
|
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?
LG
__________________
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:58
|
#9 (permalink)
|
|
Rookie
Registriert seit: Nov 2007
Beiträge: 7
Renommee-Modifikator: 0
|
AW: Probleme mit include
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 (permalink)
|
|
Mitglied Diamant
Registriert seit: Dec 2007
Ort: Bremen
Beiträge: 3.422
|
AW: Probleme mit include
Zitat:
Zitat von Disasterp1ece
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 meinte dieses Beispiel von Dir.
LG
__________________
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, 19:24
|
#11 (permalink)
|
Registriert seit: Mar 2004
Beiträge: 1.743
|
AW: Probleme mit include
So. Vom zocken wieder da ^ ^
Zitat:
Zitat von Disasterp1ece
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?
|
Das ist gut Umschrieben. Aber haste ja schon selbst herausgefunden
Zitat:
Zitat von Disasterp1ece
Wollte dann nur noch diese augelagerte Funktion einbinden und dann im jeweiligen Hauptskript mit unterschiedlichen Parametern aufrufen.
|
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:
|
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
|
Autoload wird ausgeführt wenn man eine neue Klasse instanziert die bis dahin noch unbekannt ist (letzte Zeile).
Die zweite Möglichkeit wäre, du schreibst deine include.php um:
|
PHP-Code:
|
|
// alles was du machen willst include($script);
|
Und dort wo du Sachen einbinden willst:
|
PHP-Code:
|
|
$script = "foo.php"; // sonstige deiner variablen include("include.php");
|
Ganz normal iterativ (nicht als Funktion) schreiben.
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
__________________
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
__________________
Mein System: Hamster 120 Herz p.M., Windows 3.1, 128 Megabären aufm Einrad
Geändert von ZodiacXP (11.03.09 um 19:27 Uhr).
|
|
| Themen-Optionen |
|
|
| Ansicht |
Linear-Darstellung
|
|
 |
|
»
Neue Tutorials
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
»
Letzte News
|
 |
|
|
|
|
|
|
|
|
|
|
»
Tools
|
 |
|
|
|
|
|
»
Neue Links
|
 |
|
|
|
|
(Cinema 4D-Objekte)
|
|
(Cinema 4D-Tutorials)
|
|
(Cinema 4D-Tutorials)
|
|
(Cinema 4D-Tutorials)
|
|
(Cinema 4D-Tutorials)
|
|
»
Jobs @ tutorials.de
|
 |
|
|
|
|
|
|
|
|
|
|