includieren mit GET?

  • 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. ;)

  • 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..? :roll:

  • 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
    }
    ?>

  • 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

  • Ich habe nicht gesagt, dass es nicht sicher ist, sondern zu umständlich und zu dem auch noch schlampig programmiert. Ich empfehle dir mal

    PHP
    error_reporting(E_ALL);
    ini_set("display_errors", true);


    am Anfang des Scriptes. Und deine Methode ist bestimmt nicht sicherer als die von TheUser oder mir.

  • Ich habe nicht gesagt, dass es nicht sicher ist, sondern zu umständlich und zu dem auch noch schlampig programmiert. Ich empfehle dir mal

    PHP
    error_reporting(E_ALL);
    ini_set("display_errors", true);


    am Anfang des Scriptes. Und deine Methode ist bestimmt nicht sicherer als die von TheUser oder mir.

    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!

  • n switch ist genauso sicher... Aber übersichtlicher und sauberer. 8|

    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 :P

  • 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?

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Geht ja wieder mit den Zeilenumbrüchen. :)

    Ein Beispiel das ich gerade nutze, finde ich schon praktisch zu handlen:

    arr.navigation.php

    getNavi($navi) (ausschnitt)

    PHP
    function 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)

    PHP
    if(isset($_GET['action'])) {
        $a = (int)$_GET['action'];
        $inc = (array_key_exists($a,$navi) && $_SESSION['access_lvl']<=$navi[$a]['access'])
            ? 
            include("includes/inc.".$navi[$a]['file'].".php") 
            : 
            include("includes/inc.home.php");
    } else {
        $inc = include("includes/inc.home.php");
    }

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

    Einmal editiert, zuletzt von SinnlosS (27. August 2009 um 23:17)