Mike: intval vs. ctype_digit

ich möchte nach einer Formularübergabe ermitteln ob in der übergebenen Variable auch eine ganze Zahl drin ist,

intval oder ctype_digit

beides macht es, aber welches ist das richtige?

Mike

  1. Hallo

    ich möchte nach einer Formularübergabe ermitteln ob in der übergebenen Variable auch eine ganze Zahl drin ist,

    intval oder ctype_digit

    beides macht es …

    nein

    intval ist eine Typumwandlungsfunktion und wandelt den Wert einer Variable/einer Eingabe in eine Ganzzahl um. Besteht die Eingabe nur aus Ziffern, werden diese auch wieder ausgegeben, besteht die Eingabe (auch) aus Buchstaben, gibt die Funktion 0 zurück. Dabei kann eine Eingabe vom Typ String (z.B. eine Zeichenkette, die aus Ziffern besteht) sein, zurück kommt ein Integer (eine „richtige“ Zahl).

    ctype_digit prüft, ob die Eingabe ausschließlich aus Ziffern besteht. Passt also auch nicht, wenn deine Bedingung „auch eine ganze Zahl drin“ ist (Betonung auf „auch“).

    Tschö, Auge

    --
    Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
    Terry Pratchett, "Wachen! Wachen!"
    ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
    Veranstaltungsdatenbank Vdb 0.3
  2. Moin

    ich möchte nach einer Formularübergabe ermitteln ob in der übergebenen Variable auch eine ganze Zahl drin ist,

    intval oder ctype_digit

    beides macht es, aber welches ist das richtige?

    Moment. Ich würde beide als nicht richtig ansehen.

    ctype_digit() prüft ob es sich um eine Dezimalzahl handelt:  http://de3.php.net/manual/en/function.ctype-digit.php

    intval() gibt den eingegebenen String als Integer zurück und zwar in der Form, dass von dre ersten Stelle an die Zeichenkette Position für Position geprüft wird. Solange es sich um Int handelt wird das Zeichen der Aktuellen Position an den Wert angehangen

    also 123ik5 ergibt mit intval 123 http://de3.php.net/manual/en/function.intval.php

    richtiger in meinen Augen wäre: is_int(). Denn nur diese Funktion testet ob der Wert auch wirklich int ist

    http://de3.php.net/manual/en/function.is-int.php

    Um zum Beispiel eine ID zu übergeben würde ich intval empfehlen. Einfach alles was nicht int ist herauslöschen. Wenn du aber wirklich überprüfen möchtest, dann bitte is_int()

    Gruß Bobby

    --
    -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
    ### Henry L. Mencken ###
    -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
    ### Viktor Frankl ###
    ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
    1. Hello,

      [bis dahin richtig]

      richtiger in meinen Augen wäre: is_int(). Denn nur diese Funktion testet ob der Wert auch wirklich int ist

      http://de3.php.net/manual/en/function.is-int.php

      Die Eingaben kommen aus einem Requeststring
      is_int() ist also nicht richtig, da die Werte immer als String an PHP übergeben werden.

      Man könnte is_numeric() benutzen, um festzustellen, ob der gesamte String eine numerische Größe repräsentiert, dann hätte man aber auch Floats, Exponentialschreibweise und so weiter mit dabei.

      PHP stellt zum Zwecke der vorgesehen Prüfung die Filterfunktionen zur Verfügung. Die testen die übergebenen Werte daraufhin, ob sie den Zieltyp repräsentieren können, nicht aber vom Zieltyp sind.

      http://de1.php.net/manual/en/ref.filter.php
      http://de1.php.net/manual/en/filter.filters.validate.php

      Um zum Beispiel eine ID zu übergeben würde ich intval empfehlen. Einfach alles was nicht int ist herauslöschen. Wenn du aber wirklich überprüfen möchtest, dann bitte is_int()

      Das ist immer dann sinnvoll, wenn die ID==0 nicht zum zulässigen Wertebereich gehört, bzw. eben das "False-Element" darstellt.

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://bikers-lodge.com
      1. Moin

        Die Eingaben kommen aus einem Requeststring
        is_int() ist also nicht richtig, da die Werte immer als String an PHP übergeben werden.

        Ah... richtig... hab mich hier von der losen Typenbindung blenden lassen. Du hast natürlich vollkommen recht.

        Um zum Beispiel eine ID zu übergeben würde ich intval empfehlen. Einfach alles was nicht int ist herauslöschen. Wenn du aber wirklich überprüfen möchtest, dann bitte is_int()

        Das ist immer dann sinnvoll, wenn die ID==0 nicht zum zulässigen Wertebereich gehört, bzw. eben das "False-Element" darstellt.

        Ich versuche die 0 als ID weitestgehend zu vermeiden. Sinn hin oder her, habs mir so angewöhnt da es weniger Probleme gibt. Ich kann so zum Beispiel auf empty prüfen. Die 0 ist dabei der false-Wert.

        Gruß Bobby

        --
        -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
        ### Henry L. Mencken ###
        -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
        ### Viktor Frankl ###
        ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
        1. Hello,

          Ich versuche die 0 als ID weitestgehend zu vermeiden. Sinn hin oder her, habs mir so angewöhnt da es weniger Probleme gibt. Ich kann so zum Beispiel auf empty prüfen. Die 0 ist dabei der false-Wert.

          Wenn Du dich in deiner Applikation konsequent daran hältst und keine Ausnahmen benötigst, dann ist das ein passabler Weg, der auch oft und gerne benutzt wird. Also nicht "weitestgehend", sondern "Konsequent" und alles wird gut ;-)

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://bikers-lodge.com