is_integer und $_GET

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

  • is_integer und $_GET

    Hallo zusammen

    bei einem GalleryScript, bei dem ich das gewünschte Bild (Nummer)
    mittels $_GET übertrage, habe ich ein Verständnisproblem mit der is_integer().
    Zur Prüfung der $_GET wollte ich eigentlich is_integer() verwenden, da die
    Zahlen immer Integer sind. Nur gibt mir is_integer() bei der Prüfung nie
    true. Wenn ich hingegen is_numeric() verwende, dann funzt es wunderbar.
    Es scheint mir fast so als ob die $_GET-Vars nicht als integer übertragen
    werden, auch wenn sie ganzzahlige Werte haben.
    Oder liege ich da komplett schief gewickelt.
    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)

  • #2
    ich wage zu behaupten, dass du dich irrst.

    Kommentar


    • #3
      Dann werde ich den Code wenn ich zu Hause bin nochmals Zeile für Zeile
      auseinandernehmen und versuchen den is_integer() wieder reinzubringen.
      Wobei ich allerdings anfügen muss, dass ich bei meiner Bedingung nur von is_integer() zu is_numeric() gewechselt habe und es dann funzte.

      Danke

      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


      • #4
        Schau mal mit var_dump($_GET);

        Auch eine schöne Funktion ist btw. intval
        Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
        var_dump(), print_r(), debug_backtrace und echo.
        Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
        Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
        Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

        Kommentar


        • #5
          zur info: alle get und post vars werden als string oder array of strings uebergeben.
          testen koennte man den typ mit

          PHP-Code:
          <?php
          if ((string)(int)$_GET['id'] == $_GET['id']) {}
          ?>
          also zuerst den integerwert der variablen bestimmen und zum pruefen wieder in einen string wandeln. wenn dieser test true gibt ist es definitiv eine integer.
          1101100 1101001 1100110 1100101 1101001 1110011 1100001 1100010 1101001 1110100 1100011 1101000

          /(bb|[^b]{2})/

          Kommentar


          • #6
            Warum nochmal zurückkonvertieren in string?
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Original geschrieben von loci
              PHP-Code:
              if ((string)(int)$_GET['id'] == $_GET['id']) 
              also zuerst den integerwert der variablen bestimmen und zum pruefen wieder in einen string wandeln. wenn dieser test true gibt ist es definitiv eine integer.
              nö, ist es nicht.

              um auch auf den typ zu vergleichen, müsstest du schon den operator === nehmen.

              ansonsten führt PHP nämlich wieder selbständig einen type cast durch, und vergleicht nur die werte ...
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                @penizillin
                Habs mit einem Code Schnippel getestet und ein Integer wird nicht erkannt
                PHP-Code:
                if(!empty($_GET['index']) && is_integer($_GET['index']))
                {
                    die(
                "Die Funktion hat einen Integer erkannt");
                }
                elseif(
                is_numeric($_GET['index']))
                {
                    die(
                "Funzt nur mit Numeric");
                }
                else
                {
                    die(
                "Funzt gar ned");

                Funzt nur mit Numeric.

                @shurakai
                PHP-Code:
                var_dump($_GET); 
                Ergibt --> array(1) { ["index"]=> string(1) "5"

                Ich hätte wirklich gedacht, dass eine Zahl als Int übertragen wird. Aber eben...
                Danke für die Hilfe
                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
                  Für alle die bei einem String feststellen wollen ob er einen Integer Wert darstellt:
                  PHP-Code:
                  function is_strInt($data){
                      if(
                  is_numeric($data) && !strpos($data'.') && !strpos($data'e') && !strpos($data'E')){
                          return 
                  true;
                      }
                      else{
                          return 
                  false;
                      }

                  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


                  • #10
                    was ist mit folgenden werten?
                    Code:
                    +5
                    -5
                    0xFF
                     3 //(!) leerzeichen vor der zahl
                    1111111111111111111 //lange zahlen
                    was spricht eigentlich gegen is_int() mit intval()?
                    Zuletzt geändert von penizillin; 03.04.2005, 23:40.

                    Kommentar


                    • #11
                      @penizillin:
                      Das mit den Hex-Zahlen habe ich gar nicht bedacht. Werde ich noch
                      nachbessern. Auch werde ich noch alle Leerzeichen aus dem Query String entfernen. Danke..
                      Negative Zahlen ändert das Script eh in 1 um und bei +5 muss ich mal noch
                      schauen, da dies eigentlich einen gültigen Wert darstellt. Wird aber durch
                      das Script z.Z. auch noch auf 1 umgebogen.
                      was spricht eigentlich gegen is_int() mit intval()?
                      Ich habe mir auch inval() mal angeschaut, aber für meine Zwecke scheint
                      diese Funktion nicht geeignet zu sein.
                      Wenn ich inval auf einen String anwende, der einen double enthält, dann
                      kriege ich einfach den Ganzzahlanteil zurück. Danach kann ich aber nicht
                      mehr feststellen ob der String wirklich ein Int war oder eben nur ein durch
                      die Funktion umgemodelter double.
                      Und die Eingabe von Kommazahlen möchte ich unterbinden.

                      Danke Gruss und gute Nacht

                      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


                      • #12
                        Danach kann ich aber nicht mehr feststellen ob der String wirklich ein Int war oder eben nur ein durch die Funktion umgemodelter double.
                        wozu muss man das wissen? um eine fehlermeldung auszugeben?

                        Kommentar


                        • #13
                          wozu muss man das wissen? um eine fehlermeldung auszugeben?
                          Das ganze ist Teil meines Gallery Scripts und dieses arbeitet mit einer GET-Var. Mittels der übermittelten Zahl weiss das Script dann bei welchem Bild die Vorschau beginnen soll resp welches Bild angezeigt werden muss.
                          Und ein double würde sehr stark für eine versuchte Manipulation sprechen und diese wird mit einem Eintrag in .htaccess "bestraft"

                          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


                          • #14
                            ach so - wenn's solchen maßnahmen dient...
                            ich kenne die möglichkeit, jemanden bei geringsten unstimmigkeiten in den übermittelten daten auf die startseite zu schicken. der/die hat nix davon, du dagegen, eine impression der startseite

                            Kommentar


                            • #15
                              @penizillin

                              Danke vielmals für deine Anregungen. Ich habe meine Fkt nun ein wenig ergänzt
                              PHP-Code:
                              function is_strInt($data){
                                  if(
                              is_numeric($data) && !strpos($data,".") && !strpos($data"e") && !strpos($data"E")
                               && !
                              strpos($data,"x") && !strpos($data"X"))
                                  {
                                      return 
                              true;
                                  }
                                  else
                                  {
                                      return 
                              false;
                                  }

                              Die Whitespaces und allfällige Pluszeichen entferne ich dann damit
                              PHP-Code:
                              $iii preg_replace('/\s*/'''$_GET['pics']);
                              $iii ereg_replace('\+'''$iii); 
                              Nochmals danke und schönen Tag
                              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

                              Lädt...
                              X