Request Variablen in globale Variablen umwandeln Funktion

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Request Variablen in globale Variablen umwandeln Funktion

    Hi Leute!

    Kurze Frage bzgl. Umwandlung von Variablen: gibts irgendeine Funktion zum kollektiven Umwandeln von Request Variablen in globale Variablen?
    Konkretes Beispiel:
    PHP-Code:
    $_REQUEST['mode'] = "kaufen" wird zu $mode "kaufen"
    Grund dafür: globale Variablen sind viel einfacher zu handeln (z.B. bei SQL Queries) und wenn ich ein Formular mit 30 Variablen und mehr habe und da jede Variable von Hand definieren muss (in der Form
    PHP-Code:
    if(!$mode$mode $_REQUEST['mode']; 
    ist das doch ziemlich mühsam.

    Jetzt hatte ich den Gedanken, eine Funktion zu haben, die das Array $_REQUEST umwandelt und die Schlüssel als Variablennamen nimmt.

    Hinweis: bei PHP ist register_globals auf "Off", darum kann ich die Variablen nicht direkt übernehmen. Ist auch gut so, nur habe ich ein einziges Formular mit irre vielen Variablen, das sicherheitstechnisch nicht so wirklich relevant ist, insofern kann ich bei dem alle Variablen einfach übernehmen.

    Danke für eure Anregungen
    lG
    Bernie

  • #2
    Re: Request Variablen in globale Variablen umwandeln Funktion

    Auch wenn ich dein Vorhaben idiotisch finde, und die Begründung schwachsinnig - extract() macht das, was du willst.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Danke für den interessanten Zusatzkommentar! Immer wieder nett, wie hier geantwortet wird. Das nennt man halt mal "Nett"-iquette

      Vielleicht kannst du mir ja auch begründen, warum du das so schwachsinnig findest!?

      Ich nehm einfach alle Variablen und die, die z.B. fürs Speichern zuständig sind, definiere ich zusätzlich manuell (sprich: nur, wenn sie per Post übergeben werden) bzw. lösche sie (wenn nicht per Post übergeben).

      Also, wo ist Problem?

      Übrigens bekam ich gerade auch Antwort in einem anderen Forum (in etwas netterem Ton): import_request_variables() macht genau das

      Danke jedenfalls

      Kommentar


      • #4
        Schwachsinnig daran ist, dass du einfach alle Vars aus Request global setzen willst. Also wenn du ein Form mit Post hast und ich diesem noch einen Parameter anhänge à la action="index.php?login=true", dann hast du diese Var ungeprüft in deinem Code. Wenn du in deinem Code noch eine nicht initialisierte Var namens login hast, dann hast du ein ernsthaftes Sicherheitsproblem.
        Klar musst du etwas mehr schreiben, aber ist den der Unterschied so gewaltig, dass er eine solche Einschränkung der Sicherheit rechtfertigt ?
        PHP-Code:
        echo $_POST['feld'];
        //oder
        echo $feld
        Also ich denke das Schwachsinnig meines Vorposters bezog sich imho v.a. auf den Sicherheitsaspekt deines Scripts. Weil wenn du es so machen willst, dann kannst du auch gleich register_globals wieder auf on setzen.
        Ausserdem wenn du diese globalen Werte in Funktionen verwenden willst, muss du so oder so die lange Version schreiben
        PHP-Code:
        function doSomething(){
            echo 
        $GLOBALS['feld'];

        Mein Tipp vergiss deine Version wieder, schreib etwas mehr Code, aber bleib dafür auf der sicheren Seite.

        So long
        Gruss

        tobi
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          Hi Tobi!

          Danke für deine Antwort. Sicher richtig, dass ich möglicherweise dann Variablen im Skript habe, die da nicht hingehören.

          Verstehe nur nicht, was daran unsicher sein soll (zumindest nicht in meinem Fall), weil die Variable dann zwar definiert ist, aber nicht verwendet wird. Wie gesagt, in dem Skript werden alle Request Variablen benötigt (und es sind eine Menge).

          Im Übrigen finde ich es unnöitg, Login- (bzw. andere wichtige) Daten per Formular weiterzuschleifen (außer beim Login selbst).
          Wenns wirklich auf Sicherheit ankommt, arbeite ich nur mehr mit Sessions.

          Irgendwelche Login Daten, Passwörter, etc. werden mit Session Variablen verwaltet und in keinster Form über Formulare weitergeschickt, bzw. in dem Skript auch nicht verarbeitet (es wird lediglich mittels Sessions geprüft, ob der User zum Ausführen des Scriptes berechtigt ist).
          aber ist den der Unterschied so gewaltig, dass er eine solche Einschränkung der Sicherheit rechtfertigt?
          Ja, ist er. Ist doch schon ein gewaltiger Unterschied, ob du 30 Variablen neu definieren musst (sind wahrscheinlich noch mehr) oder eine einzige Zeile schreibst.

          Wenn ich Variablen in Funktionen verwende, definiere ich sie so:
          PHP-Code:
          function irgendwas() {
          global (
          $variable1$variable2, ...);

          Ist ebenfalls wesentlich kürzer als $_GLOBALS....

          Mit import_request_variables() kann man übrigens definieren, ob nur get, post, cookies oder alle importiert werden, insofern ist da das Risiko auch einschränkbar.
          Zusätzlich kannst du damit den Namensraum einschränken. Also
          PHP-Code:
          import_request_variables("P""rvar_"); 
          übernimmt ausschließlich per Post übergebene Variablen, deren Namen mit "$rvar_" beginnt.

          lG
          Bernie

          Kommentar


          • #6
            Hi,

            wahsager hätte das vll etwas diplomatischer verpacken können,
            aber rein inhaltlich stimme ich ihm absolut zu.

            Grund dafür: globale Variablen sind viel einfacher zu handeln (z.B. bei SQL Queries)
            Sry für das bisschen bequemlichkeit, handelt man sich in aller
            regel ungleich mehr schwierigkeiten ein. Es deutet auf einen
            designfehler, wenn man so vorgehen möchte.

            greets
            (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

            Kommentar


            • #7
              Ich würde es anders formulieren: es ist außerordentlich gutes Design, wenn man diese Funktion risikolos verwenden kann

              Kommentar


              • #8
                es ist außerordentlich gutes Design, wenn man diese Funktion risikolos verwenden kann
                //kleine Korrektur und dann kann ich zustimmen
                es wäre außerordentlich gutes Design, wenn man diese Funktion risikolos verwenden könnte
                Klar in deinem Falle wird das, so wie du erklärt hast, vermutlich nicht zu Problemen führen. Aber bist du dir für jeden erdenklichen Fall wirklich sicher ?
                Im einfachsten Fall hast du einfach Vars drinne mit denen du nichts machst. Im schlimmsten Fall überschreibt dir deine Methode aber deine Vars und du arbeitest damit weiter. Würde ich einen undefinierten Zustand nennen und von dem sollte man imho beim sauberen Proggen geflissentlich Abstand nehmen.

                Gruss

                tobi
                Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                Kommentar


                • #9
                  Hey Tobi!

                  Na ja, das bedarf halt gewisser Planung. Dadurch das register_globals auf Off steht, gibts am Scriptbeginn keine globalen Variablen.
                  D.h. wenn ich gleich am Beginn alle Request Variablen definiere, überschreib ich mir damit nichts.
                  Natürlich umgekehrt könnte es passieren, dass ich mir später die mittels import_Request... generierten globalen Variablen durch späteres redefinieren wieder überschreibe.

                  Ist aber in der Situation nicht der Fall, wie gesagt, weil ich gleich nach der Definition in die Datenbank speichere.

                  Und ich werde auch in Zukunft sämtliche Scripten so designen, dass ich die Funktion bedenkenlos verwenden kann, erspart einfach eine Menge Arbeit (und damit natürlich Kosten für den Kunden).

                  Natürlich nicht, wenns da um 5 oder 10 Variablen geht, keine Frage, aber wenns ein sicherheitstechnisch nicht allzu relevanter Bereich mit sehr vielen Feldern ist, kann man das schon mal in Erwägung ziehen.

                  Kommentar


                  • #10
                    Re: Request Variablen in globale Variablen umwandeln Funktion

                    Grund dafür: globale Variablen sind viel einfacher zu handeln (z.B. bei SQL Queries) und wenn ich ein Formular mit 30 Variablen und mehr habe und da jede Variable von Hand definieren muss (in der Form
                    PHP-Code:
                    if(!$mode$mode $_REQUEST['mode']; 
                    ist das doch ziemlich mühsam.
                    auch wenns dich eventuell nerven mag, kannst du das mal ausführen? du kannst doch direkt auf die variablen zugreifen, ohne o.g. umwandlung. somit entsteht dir keinerlei mehraufwand. wozu willst du die variablen aus dem array holen? das ist doch erheblicher mehraufwand!? versteh ich nicht !?
                    Die Zeit hat ihre Kinder längst gefressen

                    Kommentar


                    • #11
                      Kommt natürlich drauf an, wie oft ich die Variable verwende, wenns nur einmal ist, ist das Ganze (meistens) kein Thema, ich brauche die Variable aber mehrmals, um diverse Checks durchzuführen und ein $variable ist einfach flotter einzutippen als $_REQUEST['variable'].

                      Das geht dann weiter mit z.B. folgendem Beispiel für einen Eintrag in die Datenbank (ich schreib nur das SQL Statement). :
                      1) Version, in der ich vorher nix definiere:
                      PHP-Code:
                      mysql_query("INSERT INTO $tbl (feld1, feld2) VALUES 
                      ('"
                      .$_REQUEST['variable1']."', '".$_REQUEST['variable2']."')"); 
                      Arrays kann man nicht so einbetten, wie "normale" Variablen, darum jedes Mal String auf String zu...deshalb isses mir so lieber (sowohl aufgrund des Schreibens als auch der Übersicht wegen:
                      2) Version, Variablen vorher definiert
                      PHP-Code:
                      mysql_query("INSERT INTO $tbl (feld1, feld2) VALUES 
                      ('
                      $variable1', '$variable2')"); 
                      Das setzt du mal um auf sagen wir 20 Felder, die du in die DB eintragen willst, ist schon ziemlich unübersichtlich und umständlich dann, wenn ichs mit den Request Vars mache (selbst wenn ichs mit copy-paste mache).

                      Ich find einfach die Handhabung irrsinnig unergonomisch und nervend. Mag sein, dass das für Andere genau umgekehrt ist, aber mich nervts halt. Und wenn ichs vermeiden kann, tu ichs.

                      Kommentar


                      • #12
                        achso, ok. für mich ists nämlich umgekehrt angenehemer - ich trenne die strings eh immer (übersicht), durch die verschiedenen arrays erkenne ich auch besser, was woher kam ... geschmackssache.
                        Die Zeit hat ihre Kinder längst gefressen

                        Kommentar


                        • #13
                          Original geschrieben von derHund
                          durch die verschiedenen arrays erkenne ich auch besser, was woher kam ...
                          Daran hat, wer schon $_REQUEST verwendet, ja vermutlich eh weniger ein Interesse ...
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #14
                            OffTopic:
                            wahsaga, du verstehst ja gar nichts: $_REQUEST kommt vom benutzer, $_SERVER dagegen...

                            Kommentar

                            Lädt...
                            X