Beim switch/case werden Dateien eingebunden, die im Script vorgegeben sind. Da kann es keine Ausrutscher geben, es sei denn, du hast dabei einen Dateinamen angegeben, den es nicht gibt. Dann ist das aber ein Scriptfehler. Es schadet ja nicht, mit file_exists zu prüfen, ist aber in dem Fall unnötig.
includieren mit GET?
-
webdesigner -
31. Juli 2009 um 18:01
-
-
Er meint nicht, ob das File (im switch/case-Ding) existiert, sondern wenn man ein Keyword eintippt, welches nicht im switch/case-Ding steht.
So habe ich das zumindest verstanden und ich würd da halt irgendwie ne Überprüfung machen, dass dann am Schluss bei nem falschen Keyword eine Error 404 Datei kommt.
Aber du hast Recht, file_exists() ist nicht richtig, tschuldigung, falsch überlegt.
Da würd ich das halt irgendwie im switch/case definieren. -
Oh mann, ich poste ein schnelle Lösung mit viel Flexibilität wo auch noch HTML und Content getrennt werden und Sachen wie 404 und Startseite funktionieren. Und was läuft hier? Ihr ärgert euch mit dämlichen und lahmen switches herum...
-
Nur mit der Ruhe.. du hast einen Ansatz gepostet, andere einen Anderen. Welcher der Bessere ist, darüber kann man sich streiten. Seit wann ärgern wir uns denn über Diskussionen über Programmieren und alternativen Lösungen..?
-
Naja mich ärgert, dass das so lange dauert, obwohl der Ansatz alle Anforderungen erfüllt und auch noch schneller und flexibler ist als die switches...
-
schneller und flexibler ist als die switches...
Schneller? Naja, da reden wir wohl von Millisekunden. Und flexibler? Das hängt doch von der Komplexität einer Seite ab. Beim "Normal-User" reicht ein switch allemal. -
Switch heißt alles durchprobieren, Array heißt nen Hash-Lookup. Das ist schon entscheidend.
Außerdem kann man nen Array ohne sonstige Code-Änderungen auch aus einer Konfigurationsdatei ereugen, wenn man etwas aufmöbeln will. -
ich habe es jetzt so gemacht, das ist am besten.
<?php
$inc_array = array();
$inc_dir=opendir ("./includes");
while ($inc = readdir ($inc_dir)) {
if($inc != "." && $inc != "..") {
$short_inc = str_replace(".inc.php", "", $inc);
array_push ($inc_array, $short_inc);
}
} closedir($inc_dir); // close Ordner include
if (isset($_GET[action]) && in_array($_GET[action], $inc_array) ) {
include("./includes/".strip_tags($_GET[action]).".inc.php");
} else {
include("./includes/start.inc.php"); // Startseite
}
?> -
ich habe es jetzt so gemacht, das ist am besten.
Nö, ist es definitiv nicht. Viel zu umständlich. -
Nö, ist es definitiv nicht. Viel zu umständlich.
Aber am sichersten, sagt ihr mal warum es nicht am sichersten von allen Methoden sein soll, da bin ich gespannt
-
-
Geht SICHERHEIT nicht ausdrücklich vor, bei mir schon. bei dir etwa nicht?
-
HAAAAAAALLLLLLLLOOOOOOOOOO???????????
Habe ich die Sicherheit oder den Programmierstil bemängelt??????
Nochmal: Das Script ist zu umständlich und schlampig programmiert! -
Sicherheit geht vor Sicherheit, gutem Programmierstil und einfachem Code. xD
*Brüll* -
n switch ist genauso sicher... Aber übersichtlicher und sauberer.
Wenn ein Wert kommt, der nicht im switch ist - kommt nichts, damit hast du alle möglichkeiten eines falschen includes ausgeschlossen O.o . Sicherer gehts nicht, der einzige weg das zu umgehen ist, den code zu ändern... Und wer das kann, der kann deine Methode auch einfach löschen
-
Ich nutze auch die von TheUser vorgeschlagene array-Lösung. Ich sehe bei der switch-Lösung keinen Vorteil, dafür aber den ein oder anderen Nachteil der vllt nicht so gravierend ist, aber wozu das in Kauf nehmen wenn es nicht nötig ist? Die array-Lösung ist auf jedenfall schneller. Und, was ich noch praktisch finde, ich kann ganz simpel noch mehr Punkte implementieren, z.b. access_lvl für unterschiedliche Usergruppen mit variierenden Zugriffsrechten. Ich würd nen Beispiel posten, aber irgendwie spinnt dieses Forum bei mir völlig rum und entfernt jegliche Zeilenumbrüche in meinen posts, könnte also nur 1-zeiler posten. kann mir jemand sagen was da los ist? wie kriegt ihr bitte zeilenumbrüche in eure postings?
-
Geht ja wieder mit den Zeilenumbrüchen.
Ein Beispiel das ich gerade nutze, finde ich schon praktisch zu handlen:
arr.navigation.php
PHP
Alles anzeigen$navi = array( 1=>array( "name" =>"Home", "access"=>5, "file" =>"home" ), 2=>array( "name" =>"Neuer Auftrag", "access"=>1, "file" =>"new_order" ), 3=>array( "name" =>"Kunden", "access"=>3, "file" =>"view" ), 4=>array( "name" =>"Archiv", "access"=>3, "file" =>"view" ), 16=>array( "name" =>"Online Status", "access"=>1, "file" =>"status" ), 11=>array( "name" =>"Radiosender", "access"=>3, "file" =>"radiosender" ), 8=>array( "name" =>"Rechnungen", "access"=>1, "file" =>"rechnungen" ), 9=>array( "name" =>"Rechnungsarchiv", "access"=>1, "file" =>"rechnungen" ), 5=>array( "name" =>"Admin", "access"=>1, "file" =>"admin" ), 10=>array( "name" =>"Logout", "access"=>5, "file" =>"logout" ) );
getNavi($navi) (ausschnitt)
PHPfunction get_navi($navi) { $return = ""; foreach($navi as $k=>$v) { if(isset($_SESSION['access_lvl']) && $_SESSION['access_lvl']<=$v['access']) { $style = (isset($_GET['action']) && $k==$_GET['action']) ? " style='background-color:#7e4a9a;color:#ffffff;'" : ""; $return.= "<a href='index.php?action={$k}'{$style}> {$v['name']}</a>\n"; } } return $return; }
index.php (ausschnitt)
-