Links mit PHP

leon_20v

Erfahrenes Mitglied
Ernaut muss ich euch belästigen,
ich möchte eine linksteuerung mit include befehlen machen, nur hab ich mir das irgendwie einfacher gedacht, als es jetzt ist :(

das ist mein code, mit dem ich es versucht hat, nur funktionierts nicht und ich weiß nicht warum :(

PHP:
    if($_GET['inc']=="models"){include("models.php");}
    else {if($_GET['inc']=="register"){include("register.php");}
        else {if($_GET['inc']=="mdm"){include("mdm.php");}
            else {if($_GET['inc']=="mdm"){include("mdm.php");}
                else { include("indextext.php");}

meine denkweise:

wenn inc=1 dann, wenn inc=2 dann, wenn inc=2 dann, sonst include xyz
 
hmm ich habs jetzt so gelöst

PHP:
if($_GET['inc']=="models"){include("models.php");}
	elseif($_GET['inc']=="register"){include("register.php");}
		elseif($_GET['inc']=="mdm"){include("mdm.php");}
			elseif($_GET['inc']=="mdm"){include("mdm.php");}
				else { include("indextext.php");}

ich weiß nicht warum es anderst nicht geht... hmm
 
1. Keiner weiß, was passieren SOLL und was tatsächlich PASSIERT
2. "Funktioniert nicht" ist in der Regel keine ausreichende Fehlerbeschreibung
3. Code richtig einrücken hilft nicht nur uns sondern auch die ungemein beim Verstehen deines Quellcodes ;)
 
1. Einrücken solltest du auf jeden fall, sonst hast du auch bei deinem Code nach 2 Tagen keine übersicht mehr.
2. solche sachen die du hier machst löst man grundsätzlich mit einer switch case.

PHP:
$site = $_GET[inc];
switch ($site);
{
	case "models":
		include ("models.php");
		break;
	case "register":
		include ("register.php");
		break;
	case "mdm":
		include ("mdm.php");
		break;
	default:
		include ("indextext.php");
		break;
}

Aber bitte nicht einfach kopieren, such dir ein Anfänger Tutorial und lese dir das mal durch bis du die Grundlagen beherrscht;)

LG

Michael
 
Alle meine Vorredner haben recht. Aber um diene Frage zu beantworten warum das erste nicht ging.
Wenn man Hirnhamster Punkt 3 anwendet, sieht man schnell dass da was falsch ist
PHP:
    if($_GET['inc']=="models"){
        include("models.php");
    }else {
        if($_GET['inc']=="register"){
            include("register.php");
        }else {
            if($_GET['inc']=="mdm"){
                include("mdm.php");
               }else {
                   if($_GET['inc']=="mdm"){
                       include("mdm.php");
                   }else {
                       include("indextext.php");
                   }
//Die folgenden schliessenden Klammern fehlen in deinem Beispiel                   
               }
           }
   }

Ein Switch ist da definitiv eleganter
 
das mit dem switch hab ich soweit verstanden, ist ja eine super sache und bleibt schön übersichtlich, nur habe ich eine frage...

ich habe das problem das ich später einmal auf einer seite mind. 90 Links habe. wenn diese links geöffnet werden, soll ein bisschen text stehen und 5-10 bilder die per klick größer gemacht werden sollen.

wie würdet ihr den das am besten aufbauen?
könnt ihr mir hierzu noch einen tip geben?
 
In $_GET['inc'] steht was der Besucher haben möchte.
Damit dort nicht jeder irgendwas angibt, kannst du das absichern mit [phpf]basename[/phpf].
Diesen "Basename" speicherst du in einer Variablen (z.B. $seite) und fragst per [phpf]file_exists[/phpf] ob es die Datei gibt (also $seite . ".php").

Wenn ja dann folgt ein include (hier: "include($seite . '.php');" ) ansonsten ist ein Fehler aufgetreten oder dir will jemand was böses.
 
Zuletzt bearbeitet:
Nehmen wir an jemand besucht deine Seite über "...?inc=models". Dann steht in $_GET["inc"] auch "models" drin. Wendest du darauf nun [phpf]basename[/phpf] an und speicherst es in $seite, dann steht auch in $seite noch "models".

Gegenbeispiel (bis hier): Jemand attackiert dein Seite mit "..?inc=../../sensible.php", dann steht das auch in deiner $_GET["inc"] aber nach [phpf]basename[/phpf] würde in der Variablen $seite nur noch "sensible.php" stehen. Somit konntest du einen Angriff halbwegs abfangen.

Weiter gehts:
Jetzt prüfst du in einer Kontrollstruktur (am Besten IF) ob es die Datei $seite gibt als PHP. Also nutzt du [phpf]file_exists[/phpf] und verwendest als Dateinamen folgendes: $seite . ".php"
Bei TRUE (es gibt die Datei), machst du ein include($site . ".php") und bei FALSE (es gibt sie nicht), machst du was anderes (zum Beispiel eine Fehlerseite).

Wenn du noch mehr Beispiele brauchst klick die Links an da stehen ein paar drin.
 
Zurück