kostenloser Webspace werbefrei: lima-city


Include mit $_GET-Variable

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    m********e

    Hallo Leute!
    Ich möchte in eine Datei (articles.php) meine Artikel mit Variablen inserieren.
    $1 == 'text';

    So wie oben angezeigt. In einer anderen Datei (index.php) möchte ich diese nun über die $_GET-Variable aufrufen, hab da aber eine kleine Schwierigkeit mit der Umsetzung, nämlich würde dann der Code ja folgendermaßen aussehen:
    echo $$_GET['id']

    Da dieses ja ziemlich umsauber ist wäre es nett, wenn ihr mir eine Alternative aufzeigen könntet.
    LG master2die

    //EDIT: Also ich möchte die Dateien mit ?id=XY aufrufen lassen, um es impler zu formulieren ;)

    Beitrag zuletzt geändert: 22.10.2009 18:46:57 von master2die
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 1. Zum ersten Code: Eine Vairable darf nicht aus einer Zahl bestehen! Genuergesagt, darf nicht mit einer Zahl beginnen, und eine 1-Zahl-Variable beginnt ja logischerweise mit einer Zahl.
    2. Im 2. Code hast du zwei $ hintereinander und den ; vergessen.
    3. Ich versuche das mal einfacher zu erklären. Das, was du geschrieben hast versteht nämlich keiner. Dei mir nicht böse, wenn ich es falsch interpretiert habe.

    Du hast mehre Dateien. Eine ist die index.php. Dann hast du eine weitere Datei (articles.php) in der du festlegst, welche Seiten bei welcher GET-Variable includet werden sollen.


    Falls es das ist:

    articles.php:
    <?php
    $inlcude_sites = array(); // das Array für die Include-Seiten wird angelegt
    
    $inlcude_sites['home'] = 'home.php';
    $inlcude_sites['guestbook'] = 'gb.php'; // Das Muster so fortsetzen
    ?>


    index.php:
    <?php
    include('articles.php'); // Daten laden
    
    if(!empty($inlcude_sites[$_GET['id']])) {
        include($inlcude_sites[$_GET['id']]);
    } else {
        echo '<b>Seite nicht gefunden!</b>'; // was passieren soll, wenn der GET-Variable keine Beudeutung zugeordnet ist
    }
    ?>


    Beitrag zuletzt geändert: 22.10.2009 19:13:51 von drafed-map
  4. Autor dieses Themas

    m********e

    Ja, danke - des mit den Zahlen wusst' ich garned ;) Ich werde mich auf jeden Fall an deinen "Codeschnipseln" orientieren.
    LG

    //Edit: Kann man die "Zahlen_variablen" nicht mit Buchstaben umgehen und das Script somit verienfachen?
    LG

    Beitrag zuletzt geändert: 22.10.2009 19:32:40 von master2die
  5. @drafed-map: Ich verstehe diese Codezeile nicht recht:
    !empty($inlcude_sites[$_GET['id']])

    empty prüft ob eine Variable leer oder false ist (also 0, '0', NULL, FALSE, '', usw...), aber afaik nicht ihre Existenz. Daher sollte das eher ein isset sein, oder?

    @master2die: Die obige Variante von drafed-map ist schon ganz gut. Das mit seltsamen $$_GET['id']s zu realisieren ist a) stilistisch unschön b) unsicher.
  6. k**********k


    @master2die: Die obige Variante von drafed-map ist schon ganz gut. Das mit seltsamen $$_GET['id']s zu realisieren ist a) stilistisch unschön b) unsicher.


    Soetwas ist doch im Allgemeinen unsicher und schlechter Stil. Auch drafed-maps Methode. Hierzu mal ein Link: http://burnachurch.com/71/directory-traversal-kurz-erklaert/
  7. nikic schrieb:
    @drafed-map: Ich verstehe diese Codezeile nicht recht:
    !empty($inlcude_sites[$_GET['id']])

    empty prüft ob eine Variable leer oder false ist (also 0, '0', NULL, FALSE, '', usw...), aber afaik nicht ihre Existenz. Daher sollte das eher ein isset sein, oder?

    Du hast weiter gedacht, aber ich noch ein Stück weiter. Kopiere den Code raus, und ersetze mal !empty() durch isset(), das wird witzig wenn du in der Adresszeile index.php?id= stehen hast, dann wird nämlich versucht auf das Array-Element '' zugreifen würdest, also verlgiechbar, wie wenn du versuchen würdest die Variable $ aufzurufen. Klar?


    ketchupfleck schrieb:
    Soetwas ist doch im Allgemeinen unsicher und schlechter Stil. Auch drafed-maps Methode. Hierzu mal ein Link: http://burnachurch.com/71/directory-traversal-kurz-erklaert/

    Ich möchte dich darauf hinweisen, meinen Code durchzulesen, um dann festzustellen, dass sobald versucht wird, eine Seite einzubeziehen, die nicht im Array vorkommt nichts weiter gemacht wird, als eine Fehlermeldung auszugeben.

    Beitrag zuletzt geändert: 23.10.2009 2:06:37 von drafed-map
  8. k**********k


    Ich möchte dich darauf hinweisen, meinen Code durchzulesen, um dann festzustellen, dass sobald versucht wird, eine Seite einzubeziehen, die nicht im Array vorkommt nichts weiter gemacht wird, als eine Fehlermeldung auszugeben.


    Huch. 1:0 für dich. Ich hab da wohl was überlesen . Mein Fehler.

    Beitrag zuletzt geändert: 23.10.2009 1:57:47 von ketchupfleck
  9. Ho, drafed-map, wenn ich jetzt aber id=hagulagalaguglamarutzi schreibe, dann bekommt man eine Notice, was sehr unschön wirkt. Daher sollte man beides kombinieren, isset und empty:

    <?php
    include('articles.php'); // Daten laden
    
    if(isset($_GET['id'])) {
      if(array_key_exists($_GET['id'], $include_sites)) {
          include($inlcude_sites[$_GET['id']]);
      } else {
          echo '<b>Seite nicht gefunden!</b>'; // was passieren soll, wenn der GET-Variable keine Beudeutung zugeordnet ist
      }
    }
    else {
      echo 'Standart';
    }
    ?>


    Beitrag zuletzt geändert: 23.10.2009 15:22:41 von nikic
  10. nikic schrieb:
    Ho, drafed-map, wenn ich jetzt aber id=hagulagalaguglamarutzi schreibe, dann bekommt man eine Notice, was sehr unschön wirkt.


    Ich bin von einem Server ausgegangen, dessen Error-Reporting-Level so eingestellt ist, dass sowas nicht gezeigt wird. Man könnte das Error-Reporting-Level mit error_reporting(4), error_reporting(2) oder error_reporting(1) so verändern, dass man nicht von solchen Kleinigkeiten gestört wird. Ich habe das bei meinerm localen Server so als Standrt, wennn man keine Error-Reporting-Lever angibt, deswegen achte ich nicht aus soetwas. Deine Lösung funktioniert antürlich ebenfalls.
  11. Okey, dass ist natürlich dann nurnoch der Unterschied zwischen sauberem Code und dem quick 'n' dirty. Ich persönlich bevorzuge den sauberen, aber jedem das seine. In der Entwicklung ist es aber allgemein sehr empfehlenswert mit error_reporting(E_ALL | E_STRICT); zu arbeiten :)
  12. Autor dieses Themas

    m********e

    Oha :D Das ist ja ganz schön umständlich für meine Verhältnisse ;)
    Gibt es keine simplere Methode? Das muss sicherheitstechnisch nicht hochgradig sein, aber eine einfache IF-Anweisung wäre doch besser? Ich möchte einfach über eine ID (?id=XY) (mögl. Zahlen) nur einen Artikel auslesen lassen. Dabei muss es nicht zwingend eine Variable sein, aber ich denke, dass man da nicht drumherum kommt.
    LGh
  13. Als "nicht sauber" empfinde ich einen Code, der nicht eingerückt ist, nur Variablen wie $a, $b, $x, $i usw. enthält, oder dann wenn der User den Nutzen von eigenen Funktionen nicht kapiert.

    Was, $i ist keine aussgaekräftige Variable ... shit ... *schnell alle Codes umschreib*
    Nein, ernsthaft: $i hat sich durchaus eingebürgert als temporäre Iterationsvariable und ich würde keinen Sinn darin sehen die jetzt $Iterationsvariable_die_inkrementriert_wird, weil das unübersichtlich ist. Auch alle anderen Variablen sind durchaus sinnvoll. Wenn ich weiß, was sie bedeuten, dann ist $x deutlich besser als $xeroxkopiereridentifikationsnummer (obwohl das eher $xid wäre). Wenn man seine eignen Funktionen nicht versteht, ist man natürlich selbst schuld.

    nikic schrieb:
    In der Entwicklung ist es aber allgemein sehr empfehlenswert mit error_reporting(E_ALL | E_STRICT); zu arbeiten :)

    Das stimmt, wenn man Register Globals an hat, dann kann es gefährlich werden, wenn nicht alle Variablen definiert sind. Ich arbeite aber immer mit deaktivertem Register Globals, von daher stellt dies keine Sicherheitslücke dar, und in dem kleinen Code oben sowieso nicht. Wenn ich das ganze isset-Zeugs weg lasse, muss ich nicht so weit einrücken, habe weniger funktionslosen Code und weniger geschweifte Klammern.

    Mit register-globals hat das meiner Meinung nach zwar wenig zu tun oder ich habe falsch verstanden, was du meinst. Weiterhin: Es ist deutlich besser eine Klammer mehr zu haben, als einen vollständigen und unabdingbaren Code-Fehler zu haben. Viele Programme markieren dir geklammerten Code sehr gut überblickbar.

    €dit: Argh... ich hab deinen Beitrag bearbeitet, statt ihn zu zitieren...


    // Ich möchte darauf hinweisen, dass der obenstehende Text nicht von mir (drafed-map) stammt, sondern dass nikic aus Versehen diesen Beitrag bearbeitet hat. Er wollte mich eingentlich nur zitieren. Mein Beitrag ist weg, ich denke aber dass der Threadersteller ihn schon gelesen hat.

    Beitrag zuletzt geändert: 23.10.2009 20:37:44 von drafed-map
  14. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!