was wenn $_GET fehlschlägt

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

  • #16
    da aber die zahl -5 (minus fünf) auch ein integer ist, nutze ich meistens:
    PHP-Code:
    if(isset($_GET['id']) && intval($_GET['id'])>0)
       
    // alles ok 
    mit dem hintergedanken, dass so ein feld, wie 'id' ausschließlich unsigned sein sollte.

    p.s. ob die eingabe "manipuliert" wurde, ist mir egal. warum soll es mich kümmern?
    Zuletzt geändert von penizillin; 04.07.2005, 14:40.

    Kommentar


    • #17
      $_GET['id'] = max(0, (int)$_GET['id']);

      So mache ich das, danach habe ich einen definierten Wert und die Welt ist wieder schön
      Ich denke, also bin ich. - Einige sind trotzdem...

      Kommentar


      • #18
        Ähem

        @jahLives
        PHP-Code:
        if(is_numeric($data) && !strpos($data,".") && !strpos($data"e") && ! 
        Versteh nicht warum Du prüftst ob "." oder "e" vorkommt und nicht "K" oder "L"

        Ist das was besonderes ?

        Warum nich PHP's schwache Typen Konvertierung nutzen

        PHP-Code:
        function ensureInt(&$strInt) {
          
        $strInt $strInt +1;
          
        $strInt $strInt 1
        }
          print 
        ensureInt("6 ist blöd"// gibt 6
          
        print ensureInt("alles ist blöd"// gibt 0;
          
        print ensureInt("6"// gibt 6

          
        $i "6 ist blöd";
          print 
        $i;  // gibt 6 ist blöd
          
        ensureInt($i);
          print 
        $i// gibt 6 
        Zuletzt geändert von chansel0049; 05.07.2005, 13:59.
        chansel0049
        ----------------------------------------------------
        if you've reached the bottomline - dig further!
        Übersetzer gesucht? http://www.babelport.com

        Kommentar


        • #19
          chansel0049, lies dir das mal durch, dort ist alles erklärt:
          http://de3.php.net/manual/de/language.types.integer.php
          http://de3.php.net/manual/de/language.types.float.php

          dein ensureInt() ist ein fehlerträchtiger workaround.

          Kommentar


          • #20
            @chansel
            Versteh nicht warum Du prüftst ob "." oder "e" vorkommt und nicht "K" oder "L"
            Was haben denn K oder L mit Zahlwerten zu tun ? Der Punkt ist um Decimalzahlen festzustellen und e für Exponetialwerte zur Basis 10. Ich wollte bei meiner Funktion sicherstellen, dass nur Integer Werte durchgehen. is_nummeric() lässt aber auch Decimalzahlen, Oktalzahlen und Exponetialzahlen durch --> also muss ich diese ausschliessen.

            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


            • #21
              hmh, leuchtet ein,

              aber Int sicherzustellen geht einfacher mit Zwangskonvertiertung siehe oben oder
              @penizillin
              PHP-Code:
              function ensureInt(&$strInt) {
                
              $strInt $strInt +1;
                
              $strInt $strInt 1
                
              $strInt = (int)$strInt;

              damit auch Floats zu Ints werden,

              Sicher ist dies keine 100% umwandlung mit exakter Genauigkeit für Berechnungen, aber für $_GET im Zusammenarbeit mit CMS oder DB-Sätzen IDs allemal ausreichend um SQL Injections abzufangen

              Oder sehe ich das falsch?
              chansel0049
              ----------------------------------------------------
              if you've reached the bottomline - dig further!
              Übersetzer gesucht? http://www.babelport.com

              Kommentar


              • #22
                Ich will ja nicht dass auch Floats oder Oktalzahlen als Int durchgehen. Die Funktion ist für ein Gallery Script wo ich die Bild Ref per $_GET übergebe (ist nur ne Nummer) und da will ich einfach sicher sein, dass nur ein Int kommt und wenn nicht bin ich sicher, dass jemand am QueryString rumgebastelt hat.

                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


                • #23
                  und was soll +1/-1 bringen? und warum dann noch ne eigene funktion für die typenkonvertierung? dass die id-werte größer 0 sein müssen sollte man auch berücksichtigen. die einzig effektiven vorschläge haben mrhappiness und ich weiter oben gemacht.

                  Kommentar


                  • #24
                    warum nicht einfach:

                    PHP-Code:
                    <?php
                    // ...
                    $imageId $_GET['id'];

                    if(!
                    is_integer($imageId)) {
                      
                    trigger_error(blabla);
                    }

                    hier mit else, oder einfach so weiter...


                    // ...

                    Kommentar


                    • #25
                      matz0r: hat jahlives doch schon erklärt.

                      0x42 würde durchgehen
                      -42 würde durchgehen

                      Kommentar


                      • #26
                        Original geschrieben von penizillin
                        und was soll +1/-1 bringen? und warum dann noch ne eigene funktion für die typenkonvertierung? dass die id-werte größer 0 sein müssen sollte man auch berücksichtigen. die einzig effektiven vorschläge haben mrhappiness und ich weiter oben gemacht.
                        Komm wieder runter... Ich akzeptiere ja deinen Einwand... und Du hast recht ... (int) macht +1/-1 überflüssig und mit neg. Werten in DB ist natürlich klar (aber das regelt meine DBI per abs())
                        chansel0049
                        ----------------------------------------------------
                        if you've reached the bottomline - dig further!
                        Übersetzer gesucht? http://www.babelport.com

                        Kommentar


                        • #27
                          Original geschrieben von penizillin
                          matz0r: hat jahlives doch schon erklärt.
                          sry sry..

                          Wenns in ner Datenbank steht: überprüfen obs den Wert gibt (stellt mit escapen ja keine Gefahr dar), fürs Filesystem ähnliches...

                          Oder wie stehts mit regex auf 0-9 zu prüfen?

                          Kommentar

                          Lädt...
                          X