Mumma: Umwandlung in integer WERT

Aus meinem Formular kommt der WERT mittels $_POST['eingabe']

$neu = settype ($_POST['eingabe'], 'integer' );

jetzt ist es ein INTEGER, doch wenn nichts drin war in der VARIABLE ist trotzdem eine 1 drin, es sollte aber eine 0 drin sein. Wie bekomme ich also die 0 darein?

Oder, wäre das eigentlich nicht dasselber:

if ($_POST['eingabe']>0) $neu = $_POST['eingabe'];

  1. @@Mumma:

    nuqneH

    if ($_POST['eingabe']>0) $neu = $_POST['eingabe'];

    Sechs, setzen.

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
    1. @@Gunnar Bittersmann:

      nuqneH

      if ($_POST['eingabe']>0) $neu = $_POST['eingabe'];

      Sechs, setzen.

      Hm, warum hab ich da echo gelesen, wo gar kein echo dastand?

      Das Umkopieren von $_POST['eingabe'] in eine Variable $neu erscheint mir aber nicht sinnvoll.

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
      1. Das Umkopieren von $_POST['eingabe'] in eine Variable $neu erscheint mir aber nicht sinnvoll.

        "Gehört" $_POST überhaupt dem Programmierer? Ich meine, wenn der Server diese Variable setzt, darf ich sie als Programmierer denn überschreiben. In C/C++ kann sowas zu Problemen führen, in PHP klappt es ohne Probleme (von denen ich weiss), aber ist es sauber?

        Wenn ein Tylecast erfolgt, wäre das ja ein Überschreiben, ich würdehier, der Sauberkeit willen, ebenfalls eine eigene Variable benutzen die wirklich mir gehört. Wenn der Wert unverändert bleibt, ist ein umkopieren IMO nicht nötig.

        1. Hallo,

          Das Umkopieren von $_POST['eingabe'] in eine Variable $neu erscheint mir aber nicht sinnvoll.
          "Gehört" $_POST überhaupt dem Programmierer? Ich meine, wenn der Server diese Variable setzt, darf ich sie als Programmierer denn überschreiben.

          ja, darf man gern tun - bei $_SESSION ist es gar der Normalfall. Bei $_GET und $_POST würde ich es aber der klaren Struktur wegen auch vermeiden.

          In C/C++ kann sowas zu Problemen führen, in PHP klappt es ohne Probleme (von denen ich weiss), aber ist es sauber?

          In C habe ich aber nur wenige vordefinierte Variablen, wie etwa stdin oder stdout. Die haben einen klar festgelegten Typ, und theoretisch kann ich sie überschreiben, ohne dass es dem Programmablauf schadet (dass ich dann Probleme mit I/O bekomme, ist eine andere Geschichte).

          Ein wenig anders verhält es sich mit argc und argv[], deren Name ich eigentlich auch nach Belieben anders wählen könnte. Diese Variablen deklariere ich als Programmierer selbst, nämlich als formale Parameter in main(). Und auch die darf ich theoretisch überschreiben, wie ich lustig bin.

          Problematisch wird es, wenn ich die Strings überschreibe, auf die argv[] verweist - aber nicht deshalb, weil sie mir nicht "gehören", sondern nur, weil ich nicht davon ausgehen darf, dass für diese Strings mehr Speicher reserviert wurde, als für ihre Initialwerte nötig war.

          Welche Fälle in C oder C++ hattest du konkret im Sinn, wo das Überschreiben problematisch sein könnte?

          Ciao,
           Martin

          --
          Um mit einem Mann glücklich zu werden, muss eine Frau ihn sehr gut verstehen und ein bisschen lieben.
          Um mit einer Frau glücklich zu werden, muss ein Mann sie sehr lieben und darf gar nicht erst versuchen, sie zu verstehen.
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          1. Welche Fälle in C oder C++ hattest du konkret im Sinn, wo das Überschreiben problematisch sein könnte?

            Genau solche Fälle, bei denen ich nicht weiss, welcher Speicher reserviert wurde. Das gilt dann auch für APIs, die Werte zurückgeben.
            Sollte bei PHP kein Problem sein, da der Speicher dynamisch verwaltet wird.

  2. Hello,

    Aus meinem Formular kommt der WERT mittels $_POST['eingabe']

    $neu = settype ($_POST['eingabe'], 'integer' );

    jetzt ist es ein INTEGER, doch wenn nichts drin war in der VARIABLE ist trotzdem eine 1 drin, es sollte aber eine 0 drin sein. Wie bekomme ich also die 0 darein?

    Was ist jtzt ein Integer und wo ist jetzt "eine 1 drin"?

    Für deine Zwecke könnten die Filterfunktionen besser geeignet sein
    http://de2.php.net/manual/en/book.filter.php

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Also

      $_POST['eingabe']

      hier ist die 0 oder die 5 drin

      $neu = settype ($_POST['eingabe'], 'integer' );

      wenn jetzt die 5 drin ist dann ok.

      aber wenn keine Eingabe in $_POST['eingabe'] drin ist, steht aufeinmal eine 1 drin, aber es sollte eine 0 drin sein.

      1. Hi,

        $_POST['eingabe']

        hier ist die 0 oder die 5 drin

        $neu = settype ($_POST['eingabe'], 'integer' );

        wenn jetzt die 5 drin ist dann ok.

        aber wenn keine Eingabe in $_POST['eingabe'] drin ist,

        Was genau ist "keine Eingabe"? Wirklich der Wert '0', oder meinst du den Fall, in dem $_POST['eingabe'] gar nicht gesetzt ist?

        steht aufeinmal eine 1 drin, aber es sollte eine 0 drin sein.

        $neu wird bei obigem Code immer ein boole'scher Wert sein, weil das nun mal der Rückgabetyp von settype ist.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Dann sollte es so gut sein:

          if ((!isset($_POST['eingabe']))OR(empty($_POST['eingabe']))) $neu=0;
          else
          $neu = settype ($_POST['eingabe'], 'int' );

          1. Hallo,

            Dann sollte es so gut sein:

            if ((!isset($_POST['eingabe']))OR(empty($_POST['eingabe']))) $neu=0;
            else
            $neu = settype ($_POST['eingabe'], 'int' );

            Nein. Du willst settype überhaupt nicht verwenden!

            Freundliche Grüße

            Vinzenz

          2. Hallo,

            if ((!isset($_POST['eingabe']))OR(empty($_POST['eingabe']))) $neu=0;

            wenn du mit empty() prüfst, brauchst du isset() nicht mehr. Das ist bei der Prüfung mit empty() eingeschlossen.

            $neu = settype ($_POST['eingabe'], 'int' );

            Und dass dir das Ergebnis von settype() nicht weiterhilft, hat doch auch schon jemand gesagt.

            $neu = ( empty($_POST['eingabe']) ? 0 : intval($_POST['eingabe']) );

            Ciao,
             Martin

            --
            Was du heute kannst besorgen,
            das geht sicher auch noch morgen.
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
            1. Danke Martin und die anderen,

              $neu = ( empty($_POST['eingabe']) ? 0 : intval($_POST['eingabe']) );

              Doch eine Frage habe ich noch:

              bekomme ich da auch noch eine zweite Abfrage rein

              wie  $_POST['eingabe']<5 dann 0

              oder muss ich das in einem weiteren, extra Schritt machen

              1. Hallo,

                bekomme ich da auch noch eine zweite Abfrage rein
                wie  $_POST['eingabe']<5 dann 0
                oder muss ich das in einem weiteren, extra Schritt machen

                ich würde das tatsächlich in einem zweiten Schritt machen.
                Im bisher erklärten Schritt bilden wir uns den Zahlenwert der Eingabe, bzw. 0 als Ersatzwert bei fehlender Angabe.
                Im zweiten Schritt können wir dann den Wertebereich überprüfen und bei Bedarf Fehler melden oder bestimmte Werte intern korrigieren.

                Ciao,
                 Martin

                --
                Er war ein Mann wie ein Baum. Sie nannten ihn Bonsai.
                Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                1. Ja ich habe sie hinter die erste Abfrage gehängt, danke an alle :-)

              2. bekomme ich da auch noch eine zweite Abfrage rein

                Du musst die Abfrage ja nur passend verknüpfen, in diesem Fall mit OR bzw. ||

            2. Hello,

              if ((!isset($_POST['eingabe']))OR(empty($_POST['eingabe']))) $neu=0;

              wenn du mit empty() prüfst, brauchst du isset() nicht mehr. Das ist bei der Prüfung mit empty() eingeschlossen.

              Aber die Prüfung mit empty() ist bei einem erwarteten Integer äußerst ungeschickt.

              Nehmen wir mal an, dass ein nicht ausgefülltes Eingabefeld bedeuten soll "keine Änderung am serverseits vorhandenen Wert gewünscht", dann würde die Prüfung mit empty() und das anschließende 0-setzen ein sachlicher Fehler sein.

              Wir vergessen deshalb nicht, dass empty() sowohl bei numerisch 0 (hier als Stringabbild übermittelt), als auch bei leerem String oder Leerzeichen im String mit TRUE antwortet.

              Es ist also besser, hier

              if(isset($_POST['eingabe']) and is_string($_POST['eingabe']) and strlen($_POST['eingabe']) > 0)

              oder

              if(isset($_POST['eingabe']) and is_string($_POST['eingabe'])
                     and strlen(trim($_POST['eingabe'])) > 0)

              zu arbeiten, je nachdem, was gewünscht wird.

              Denn außerdem könnte $_POST['eingabe'] auch noch ein array sein ...

              Die Filterfunktionen versuchen, diese ganzen Anforderungen kompakt zusammenzufassen.
              http://de3.php.net/manual/en/book.filter.php

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
               ☻_
              /▌
              / \ Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
      2. aber wenn keine Eingabe in $_POST['eingabe'] drin ist, steht aufeinmal eine 1 drin, aber es sollte eine 0 drin sein.

        Wenn $_POST['eingabe'] leer ist, wirft dein Konstrukt eh ein Notice. Daher solltest du vorher sowieso prüfen, ob $_POST['eingabe'] gesetzt ist. Wenn das nicht der Fall ist, weisst du einfach 0 zu.

  3. Hallo,

    Aus meinem Formular kommt der WERT mittels $_POST['eingabe']

    $neu = settype ($_POST['eingabe'], 'integer' );

    jetzt ist es ein INTEGER, doch wenn nichts drin war in der VARIABLE ist trotzdem eine 1 drin, es sollte aber eine 0 drin sein. Wie bekomme ich also die 0 darein?

    $neu enthält keine Integer, sonderen eine Boolean. Steht doch im Handbuch zu settype().

    $neu = [link:http://de.php.net/manual/de/function.intval.php@title=intval]($_POST['eingabe']);

    wäre die korrekte Anweisung, um den in eine Integer umgewandelten Wert in $_POST['eingabe'] in die Variable $neu zu schreiben, vorausgesetzt $_POST['eingabe'] existiert.

    Siehe auch Handbuchabschnitt Typen-Tricks.

    Freundliche Grüße

    Vinzenz