• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Probleme bei include()

Redpadz

New member
Hallo Leute,

hab ein Problem mit include.
Um das ein wenig sicherer zu machen, habe ich mir gedacht ich schreibe mir ne Funktion dafür:

PHP:
function includiere($url){
		$ipage = $url;
				if (isset($_GET['page'])){
					$page = basename($_GET['page']);
					$tpage = 'includes/' . $page . '.php';
					if (file_exists($tpage))
					{
						$ipage = $tpage;
					}
				}
				include($ipage);
		 }

So, das Ganze dient dazu, das wirklich auch nur eingebunden werden kann was bei mir existiert.

Nun binde ich in der index.php Dateien wie folgt ein:

PHP:
includiere('includes/configinf.php');
includiere('includes/keywords.php');
includiere('includes/neuste.php');

So, die Keywords.php klappt soweit auch ganz gut.
ABER:
In der configinf.php ist alles für den Datenbankzugriff drin.
Wenn ich jetzt von der Datei neuste.php eine Datenbankabfrage mache dann klappt die nicht.
Dann kennt er die Connection nicht.
Wenn ich die Datei configinf.php direkt in der neuste.php per
PHP:
include('configinf.php')
includiere, dann geht es, wenn nicht dann nicht.

Wieso geht das nicht, wenn ich genau die Datei vorher schon mal includiere?

Auch wenn ich in der index den include normal mache geht es nicht.

Es kommt immer die Fehlermeldung:
Call to a member function query() on a non-object ....

Sobald ich den include in der neuste.php mache geht alles.
Will den include aber nur einmal machen müssen.

Was mache ich falsch?

Gruß
 
Überleg' dir mal, was passiert, wenn jemand "page=index" übergibt...

Zu deinem Problem - include führt die eingefügte Datei nicht im globalen Scope, sondern in dem Scope, in dem sich die include-Anweisung befindet (also bei dir der lokale Scope der Funktion "includiere") aus.
 
Für dein Problem wird einfach eine Whitelist angelegt. Der folgende Code zeigt die Funktionalität in vereinfachter Form:
PHP:
$whitelist =  array('start','error','about','kontakt', 'bewerbung', 'server');
$site = isset($_GET['site']) ? $_GET['site'] : $whitelist[0];
$site = in_array($site,$whitelist) ? $site : $whitelist[1];  //Fehler oder Manipulationsversuch
require "include/". $site .".php";

require erzeugt eine Fehlermeldung, sofern die Datei nicht vorhanden ist.

LG jspit
 
Zuletzt bearbeitet:
Hallo Leute,
So, das Ganze dient dazu, das wirklich auch nur eingebunden werden kann was bei mir existiert.

Ziemlich überladen die Funktion. Dient es wirklich nur dazu, das zu inkludieren was da ist?

Einfacher wäre es so:

PHP:
if(file_exists('badwords.php')==true)
        include_once('badwords.php');
else {
         echo 'Badwordlist fehlt';
}
 
Zurück
Oben