S_GET['var1'] "regelkonformer"?

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

  • S_GET['var1'] "regelkonformer"?

    Ola,

    kurze Frage: Wenn ich eine per link übergebene variable in php auslesen will, funktioniert das einerseits (bei mir zumindest), indem ich einfach auf die Variable zugreife (also: neu.php?p=3 --> kann in neu.php sofort mit $p arbeiten),
    andererseits auch mittels $_get['p'] .

    Was ist der Unterschied - ist lezteres irgendwie "besser", "regelkonformer", "zukunftssicherer" o.ä.? Fand auf php.net nichts dazu...

    Danke, danke, danke.

  • #2
    register_globals

    Kommentar


    • #3
      MaW:

      - einfach mit $p weiterzuarbeiten ist äquivalent zu "Ist mir wurscht wo du herkommst - ich will nur wissen, wie groß du bist!"

      -während $_get['p'] hieße "Wenn du kein url-parameter bist, will ich dich nicht - egal wie groß du bist!".

      Ist das alles?

      Kommentar


      • #4
        lies dir den link noch einmal durch ... ab php version *** ist register_globals grundsätzlich aus. daher ist damit $p auch nicht mehr definiert.
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          Der wichtigste Unterschied ist, dass $_GET['p'] überall, immer und nur den GET-Parameter p enthält, während der Inhalt von $p unvorhersehbar ist.
          Selbst mit register_globals=on hängt $p noch von der Reihenfolge des EGPCS-Imports ab. Und natürlich von =on an sich, was inzwischen standardmäßig off ist ...

          Also wenn du möchtest, dass dein Script überall und auch in Zukunft noch so wie gedacht funktioniert, dann gehe immer von register_globals=off aus!

          Wer ordentlich programmiert weiß sowieso stets woher seine Daten kommen und für den Notfall ist $_REQUEST['p'] das höchste der Gefühle - alles andere ist unsauber.

          Kommentar


          • #6
            für den Notfall ist $_REQUEST['p'] das höchste der Gefühle.
            oder noch besser extract($_REQUEST); hehe
            mfg

            Kommentar


            • #7
              aber nur, wenn du auf unsichere scripte stehst ....
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                Original geschrieben von alberlie
                - einfach mit $p weiterzuarbeiten ist äquivalent zu
                .. ist mir wurscht, ob du auch in ein paar Monaten noch funktionieren wirst.
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  Re: $_GET['var1'] "regelkonformer"?

                  Original geschrieben von alberlie
                  Ola,

                  kurze Frage: Wenn ich eine per link übergebene variable in php auslesen will, funktioniert das einerseits (bei mir zumindest), indem ich einfach auf die Variable zugreife (also: neu.php?p=3 --> kann in neu.php sofort mit $p arbeiten),
                  andererseits auch mittels $_get['p'] .

                  Was ist der Unterschied - ist lezteres irgendwie "besser", "regelkonformer", "zukunftssicherer" o.ä.? Fand auf php.net nichts dazu...

                  Danke, danke, danke.
                  Regelkonform ist heute folgendes:
                  PHP-Code:
                  if(isset($_GET['p'])) $p=$_GET['p']; else $p=0;
                  $p=intval($p); 
                  Die erste Zeile setzt $p, die zweite Zeile macht eine Plausi, damit es keine Injection gibt - als Beispiel gedacht.

                  Kommentar


                  • #10
                    Re: Re: $_GET['var1'] "regelkonformer"?

                    Original geschrieben von tcpip
                    PHP-Code:
                    if(isset($_GET['p'])) $p=$_GET['p']; else $p=0;
                    $p=intval($p); 
                    Byteverschwender!
                    PHP-Code:
                    $p = isset($_GET['p']) ? intval($_GET['p']) : 0
                    *scnr*

                    Btw: In dem Falle würde ich eher empty() nehmen.
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      Ja das stimmt; es ist aber weniger gut erweiterbar und verursacht eher Ueberbreite, sobald die Variabelnnamen >2 bytes lang sind.


                      Der Kommentar könnte noch angepasst werden etwa wie folgt (versuchsweise):
                      Der äussere Teil setzt die Variable, der innere Teil macht eine Plausi und schützt gegen Injection.
                      Zuletzt geändert von tcpip; 06.07.2006, 22:44.

                      Kommentar


                      • #12
                        In dem Falle würde ich eher empty() nehmen.
                        empty ist nicht immer toll
                        weil: "",0,"0",NULL sind auch leider alle empty...
                        Wir werden alle sterben

                        Kommentar


                        • #13
                          Original geschrieben von combie
                          weil: "",0,"0",NULL sind auch leider alle empty...
                          wieso "leider"? Deshalb heißt das Ding doch empty...

                          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                          Wie man Fragen richtig stellt

                          Kommentar


                          • #14
                            Original geschrieben von combie
                            empty ist nicht immer toll
                            weil: "",0,"0",NULL sind auch leider alle empty...
                            Und welche Int-Werte würden sich stattdessen im konkreten Fall ergeben, wenn wir bei der isset-Methode bleiben, und dann intval() davon nehmen ...?
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #15
                              <subjektiv>
                              ich finde die isset() Methode schöner!
                              Weil 0 da nicht als Sonderfall abgehandelt wird.
                              </subjektiv>

                              *edit*
                              ps:
                              empty ist für Strings ganz OK
                              Zuletzt geändert von combie; 06.07.2006, 23:54.
                              Wir werden alle sterben

                              Kommentar

                              Lädt...
                              X