Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „include Fehler - Undefined index“

M

Marotzke

Guest

Guten Morgen!

Ich habe einen kleinen PHP-Fehler, der mir leider wenig sagt. Und zwar geht es darum, dass ich Seiteninhalte im HTML-Body mit include einbinden will:

PHP:
<?php
if( $_GET['page'] == "" ){ include "files/php/_start.php"; }
else if( $_GET['page'] == "xx"){ include "files/php/_empty.php"; }
else if( $_GET['page'] != "xx"){ include "files/php/".$page.".php"; }
?>
Das Problem lautet in etwa wie folgt: "Notice: Undefined index: page in ...". Soweit ich das verstanden habe, will die Software wohl, dass ich beim ersten if kein == "" angebe, sondern irgendwas dahinschreibe.

Das Problem tritt NUR offline auf - online funktioniert alles perfekt. Die Variable $page enthält jeweils den zweibuchstabigen Seitennamen, dass "xx" ist der Wert für die leere Seite (ist ja auch nicht so wichtig). Aber es geht noch weiter (ebenfalls nur offline): Sobald ich eine Seite anklicke, die UNGLEICH "xx" ist, also alle anderen Seiten, die Inhalt haben, kommt der Fehler: "Warning: include(files/php/.php): failed to open stream: No such file or directory in ..."

So einer z.B. geht nicht:
abc

So einer geht aber doch:
xx

Woran könnte es liegen, und warum funktioniert es NUR offline nicht? Wie könnte man das beheben oder besser oder anders machen?


Danke für Hilfe schonmal ;)
 

gp812

Newbster

AW: include Fehler - Undefined index

Auf deinem Server ist wohl register_globals auf on gesetzt, deswegen meckert php in diesem Fall nicht. Local ist register_globals auf off.
Im Grunde ist das nur eine Warnung, dass die Variable $page gar net definiert ist. Mach vor deine If-Abfrage $page = $_GET['page'];
Und bau deine Abfrage auf $page um. Dann muss es gehen.
 

xero7

» Unterdrück(t)er

AW: include Fehler - Undefined index

Wenn er Text haben will kannst es ja auch so machen:

if ($wert1 == empty) {
blablabla
}

Und sonst würde ich dir auch mal raten mit geschweiften Klammern zu arbeiten ist einfach übersichtlicher!
 
M

Marotzke

Guest

AW: include Fehler - Undefined index

@gp812
Danke für die Hilfe, das war wohl die Lösung :)
Jetzt geht es fehlerfrei. Aber WO auf dem Server kann ich das ausstellen? Also unterm Confixx gibts da meines Wissens nach nichts.. und auf die anderen Ordner habe ich glaubich keinen Zugriff (bin bei Revido).

@xero7
Der Befehl "empty" führt zur Ausgabe: "Parse error: syntax error, unexpected ')', expecting '(' in C:\Webseiten\index.php on line 52".

Und ich arbeite doch mit geschweiften Klammern^^
 

sokie

Mod | Web

AW: include Fehler - Undefined index

@gp812
Danke für die Hilfe, das war wohl die Lösung :)
Jetzt geht es fehlerfrei. Aber WO auf dem Server kann ich das ausstellen? Also unterm Confixx gibts da meines Wissens nach nichts.. und auf die anderen Ordner habe ich glaubich keinen Zugriff (bin bei Revido).

hallo Marotzke.
da hilft dir das Suchenin Confixx nicht weiter. diese Einstellung müsste in der php.ini geändert werden. Manche Provider gestatten es einige Werte in der php.ini selbst umzuschreiben.
REGISTER_GLOBALS in der einstellung "off" ist allerdings a.) bei modernen phpVersionen Stndard, und b. sicherheitsrelevant.
solche sachen kannst du ja wie weiter oben erklärt mit $page = $_GET['page']; in eine normale variable schreiben.
nicht auf RETGISTER_GLOBALS = on zu setzen ist besserer Stil und sicherer
 
M

Marotzke

Guest

AW: include Fehler - Undefined index

Danke nochmals für die Antwort!

Aber bei Revido kann ich da gar nichts umstellen. Ich habe kaum Ordnerzugriffe, kann nichtmal die Logs löschen usw. Vermutlich kostet mich der Luxus für jede Erweiterung so um die 30€... mod_rewrite ist ja schon so unglaublich günstig -_-

Ok, arbeite ich eben drumherum mit den nicht-globalen Variablen.
 

Christian

verpeilt & verschallert

AW: include Fehler - Undefined index

vielleicht sollte man noch anfügen, dass diese art des Codens sehr 'unschön' ist.
Versuchs doch mal beispielsweise mit switch.
PHP:
switch( $_GET['page'] ){
	case 'start': include('path/to/dir/file.php'); break;
	case 'xx': include('path/to/dir/empty.php'); break;
	default: 
		if(file_exists(( $file_path = '/path/to/dir/includes/'.(string)$_GET['page'].'.php'))){
			include($file_path);
		}else{
			include('standart_leerer_bildschirm.php');
		}
	break;
}
(vereinfachtes Beispiel.)
 
Zuletzt bearbeitet:
M

Marotzke

Guest

AW: include Fehler - Undefined index

Hallo!
Okay, nehm ich halt das, sieht auch viel schicker aus :)

Was bewirkt aber der Teil "if(file_exists) ......."? Was soll er dort includen?

Auf "Trial-And-Error" Basis mal versuchen, die Datei zur übergebenen Variable zu finden, falls dies nicht mit "case" weiter oben gesetzt wurde? Und wenn er nix findet, eine eigene Fehlerseite anzeigen?

Würde gern noch sicherheitshalber genauer wissen, wie es dort gemeint ist, und warum die Sicherheitsabfrage nur da - die anderen Seiten könnten ja auch falsch sein (was mir aber NIE passieren würde) :)
 

Top_Gun

Aktives Mitglied

AW: include Fehler - Undefined index

PHP:
// Frage den Wert von $_GET['page'] ab
switch( $_GET['page'] ){
    // Wenn der Wert "start" ist: include die file.php und breche den switch ab
    case 'start': include('path/to/dir/file.php'); break;
    // Wenn der Wert "xx" ist: include die empty.php und breche den switch ab
    case 'xx': include('path/to/dir/empty.php'); break;
    // Für alle anderen Fälle:
    default: 
        // nimm den Wert von $_GET['page'] und überprüfe ob es eine .php Datei mit diesem Namen gibt
        if(file_exists(( $file_path = '/path/to/dir/includes/'.(string)$_GET['page'].'.php'))){
            // wenn ja include diese Datei
            include($file_path);
        }else{
            // wenn nicht include die standard_leerer_bildschirm.php
            include('standart_leerer_bildschirm.php');
        }
    // breche den switch ab
    break;
}

Korrigiert mich wenn ich es falsch kommentiert habe...

 

Christian

verpeilt & verschallert

AW: include Fehler - Undefined index

Nein ist korrekt kommentiert.

Besonderes Augenmerk sollte allerdings dieser Zeile gelten, daher zerrupf ich sie mal:
PHP:
 if(file_exists(( $file_path = '/path/to/dir/includes/'.(string)$_GET['page'].'.php')))

Diese Zeile lässt sich in 3 Argumente aufspalten:
1. if()
2. file_exists()
3. ( $var = 'wert' )

plus eine Stringkonvertierung:
4. (string) $var

Also wir fangen mal von unten nach oben an ( wenn man das in der Zeile ableiten würde, logischerweise von rechts nach links arbeiten wir die Argumentationskette durch )

Zu 4:
Man kann in PHP verschiedene Werte "konvertieren". Das verdeutliche ich am besten mal an einem Beispiel:
PHP:
$wert = "0815";
$var = (int) $wert; #$var hat nun den wert 815, da int (=integer) ganzzahlig bedeutet, und genau wie in Mathe schreiben wir keine 0 vor Zahlen!
$var = (float) $wert; #$var hat nun den Wert 815.0 (wird besonders häufig bei str_replace funktionen angewendet
$var = (string) $wert; #$var hat nun den Wert 0815, da php es nun nicht als zahl sondern als alphanumerische zeichenkette behandelt.
Der Grund warum ich die Stringkonvertierung hier benutzt habe ist folgender Fall:
Du gibst als Link an: index.php?page=0815984
Wenn Du die KOnvertierung jetzt nicht vollziehen würdest wäre es möglich, dass PHP versucht die Datei 815984.php zu öffnen und die Null am anfang übersieht. Das ist ja nicht im Sinne des Erfinders.

Zu 3 und 2:
Wenn Du einen String einer Funktion übergeben willst und danach noch was damit machen willst hast Du die Möglichkeit diesen String einer Variable zuzuordnen. Beispiel:
PHP:
<?
//Ohne Zuordnung
if(file_exists('bin/classes/meineklasse.php')){
	include( 'bin/classes/meineklasse.php');
}
//Mit Zuordnung
if (file_exists(($path = 'bin/classes/meineklasse.php'))) {
	include( $path );
}
Die Art es so zu schreiben IST GLEICHBEDEUTEND MIT:
PHP:
<?
$path = 'bin/classes/meineklasse.php';
if (file_exists($path)) {
	include( $path );
}

Ich hoffe ich konnte es dir ein wenig erleuchten,

Liebe Grüße
Christian

Edit:
und zu deiner Frage bzgl. Fehlerseite:
Dieser Fall dass eine Seite nicht gefunden werden kann ist in dem Default: break; -Block abgefangen. Er schaut nach ob es eine Seite gibt die oben angefragt wird und wenn nicht, dann gibt es die seite standart_leerer_bildschirm.php
 
Zuletzt bearbeitet:
M

Marotzke

Guest

AW: include Fehler - Undefined index

Zehntausend Dank @Top_Gun und @Peter_Unlustig :)

Das war ausführlich genug, super!
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
175.156
Beiträge
2.581.859
Mitglieder
67.222
Neuestes Mitglied
Gregor
Oben