Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Überprüfung ob eingabe ganzzahlig...

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Überprüfung ob eingabe ganzzahlig...

    Hallo erstmal,

    Ich bin noch beim Lernen von PhP und daher noch nicht
    mit allem vertraut, daher nehmt es mir nicht übel wenn
    ich eine blöde Frage stelle...

    PHP-Code:
    //Eingabe logisch? anzahl = Zahl?

    //anzahl in Zahl umwandeln


    $_GET['anzahl'] = floatval($_GET['anzahl']);



    if  (empty(
    $_GET['anzahl']) == FALSE)

    {


        if   (
    is_int($_GET['anzahl'])== False)
        {
            if (
    $_GET['kontrolle']== "ja")
            {
                echo 
    'Wert muss ganzzahlig sein!';
                echo 
    '<br />';
                
    $_GET['anzahl'] = "";
            }
       }
    }

    //Abfrage Anzahl und Nachname ausgefüllt?
    if ($_GET['nachname']== ""
        
    or
        
    $_GET['anzahl']== "")
    {
        
    //Formular ausgeben
        
    echo '<form action='$PHP_SELF .' method="get"
            id="Formular1"  name="Formular1">'
    ;
        
    //Nachname leer?
        
    if ($_GET['nachname']== "")
        {
            
    //Schon einmal abgesendet?
            
    if ($_GET['kontrolle']== "ja")
            {
                echo 
    '<p>Bitte Nachname ausf&uuml;llen.</p>';
            }
        }

            
    //Formularfeld: Nachname
            
    echo '<p>Nachname: ';
            echo 
    '<input type="text" id="nachname" name="nachname"
                  value"'
    $_GET['nachname'] .'" size="20" maxlength="50"/>
                  </p>'
    ;

            
    //Anzahl leer?
            
    if ($_GET['anzahl']=="")
            {
                
    //Schonmal abgesendet?
                
    if ($_GET['kontrolle']== "ja")
                {
                    echo
    '<p>Bitte Anzahl ausf&uuml;llen.(Keine Buchstaben...)</p>';
                }
            }
            
    //Formularfeld: Anzahl
            
    echo '<p>Anzahl: ';
            echo 
    '<input type="text" name="anzahl" id="anzahl"
                  value="'
    $_GET['anzahl'].'" size="20" maxlength="50"/>
                  </p>'
    ;

        
    //Übergabe der Kontrolle , ob es schon aufgerufen wurde
        
    echo'<input type="hidden" id="kontrolle" name="kontrolle" value="ja"/>';

        
    //Ausgabe des Submit-Buttons
        
    echo'<br />';
        echo
    '<input  type="submit"  name="bt_absenden" id="bt_absenden" value="absenden" />';

        
    //ende des Formulars
        
    echo'</form>';
    }

    else {
        
    //Aktion ausführen
        
    echo'<p>Folgende Angaben wurden gemacht.</p>';

        echo 
    '<p>Nachname: ';
        echo 
    $_GET['nachname'];

        echo 
    '<p>Anzahl : ';
        echo 
    $_GET['anzahl'];
    }





      
    ?> 
    Will hier prüfen, ob es sich bei der Eingabe um eine Ganzzahl handelt, aber egal welche Eingaben ich auch treffe wird mir immer angezeigt , dass es sich um keinen ganzzahligen Wert handelt.

    Und da ich mich nun schon eine Weile mit dem Fehler suchen herumgeärgert habe, dachte ich mir ich frag einfach mal hier nach warum da nie etwas herauskommen kann..

    mfg Nita
    Wenn du dir die Anwender deiner Programme als Idioten vorstellst, werden auch nur Idioten deine Programme verwenden.
    - Linus Torvalds


  • #2
    PHP-Code:
    floatval($_GET['anzahl']) 
    Natürlich ist es dann ein float und kein int, wenn auch ein Ganzzahliger float.

    Versuch es damit:

    PHP-Code:
    //Pseudocode
    if(zahl == ((int) zahl)) 
    Durch das Casten zu int werden Nachkommastellen abgeschnitten. Wenn die Zahl also vorher schon eine Ganzzahl war ist es immernoch die gleiche Zahl.
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Zitat von tkausl Beitrag anzeigen
      PHP-Code:
      floatval($_GET['anzahl']) 
      Natürlich ist es dann ein float und kein int, wenn auch ein Ganzzahliger float.

      Versuch es damit:

      PHP-Code:
      //Pseudocode
      if(zahl == ((int) zahl)) 
      Durch das Casten zu int werden Nachkommastellen abgeschnitten. Wenn die Zahl also vorher schon eine Ganzzahl war ist es immernoch die gleiche Zahl.
      Das hatte ich vorher schon versucht, aber wenn dann eine falsche Eingabe folgt(z.B. 3,7), wird das auf 3 zusammengeschnitten...

      Dadurch würde ja eine falsche Eingabe korrigiert und dann mitgeschickt, würde lieber bei der Eingabe einer Fließkommazahl eine erneute Eingabe sehen, gibt es dafür eine Möglichkeit?
      Wenn du dir die Anwender deiner Programme als Idioten vorstellst, werden auch nur Idioten deine Programme verwenden.
      - Linus Torvalds

      Kommentar


      • #4
        Boah, nimms mir nicht übel aber der Code oben ist echt schlecht.. Hab ehrlich gar keine Lust Punkt für Punkt durchzugehen.. das will/kann man sich so gar nicht ansehen.. Ev. mal ein paar grundlegende Dinge:

        1. aktiviere reporting.. schriebe ganz zu Beginn deines Scriptes

        PHP-Code:
        error_reporting(-1);
        ini_set('display_errors'1); 
        2. Was willst du mit floatval ? is_int() bzw. (int) ist schon der richtige Weg für Ganzzahlen, schau dir ev. auch noch ctype_digit() an.

        3. Halte dich an das EVA-Prinzip! http://php-de.github.io/jumpto/eva-prinzip/

        4. Nutze Variablen wenn du Werte aus GET abholst und verwende anschliessend nur mehr diese, weil die kann man einmalig prüfen, filtern etc... Und GET selbst in ruhe lassen, nichts ändern (hier zumindest nicht)

        Und:

        wenn dann eine falsche Eingabe folgt(z.B. 3,7), wird das auf 3 zusammengeschnitten
        Ja klar: "3,7" ist wie "3,A" beides kein Float in PHP ... Denn 3.7 wäre der Float den du meinst (würde auch zu einer int 3 gecastet).
        Siehe auch: http://php-de.github.io/jumpto/float-vereinheitlichen/

        LG
        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Code:
          filter_var($test, FILTER_VALIDATE_INT)
          PHP-Code:
          <?php

          $tests 
          = array(
              
          // ok
              
          '-1',
              
          '0',
              
          '1',
              
          '+1',
              
          '1234567890',
              (string)   
          PHP_INT_MAX,
              (string) (-
          PHP_INT_MAX 1),

              
          // err
              
          '',
              
          'a1',
              
          '++1',
              
          '+',
              
          '-',
              
          '--1',
              
          '+-1',
              
          '1a',
              
          '01',
              
          'ef',
              
          '0xef',
              
          '1.0',
              
          '1,0',
              
          '1,000,000',
              
          '1.000.000',
              ((string)  
          PHP_INT_MAX) . '1',  // außerhalb des Integer-Wertebereichs
              
          ((string) -PHP_INT_MAX) . '1',  //  "
          );

          foreach (
          $tests as $test) {
              
          $check filter_var($testFILTER_VALIDATE_INT);

              
          printf(
                  
          "\"%s\" => %s\n",
                  
          $test,
                  (
          false !== $check) ? 'ok' 'err'
              
          );
          }
          Ein anderer Ansatz wäre:

          Code:
          $test === (string) (int) $test
          filter_var ist aber sicherlich vorzuziehen.

          Kommentar


          • #6
            Alles, was aus dem Netz gesendet wird, ist erstmal vom Typ String!

            is_int() nimmt eine Typenprüfung vor...
            PHP-Code:
            is_int('1'); // false
            is_int(1); // true 
            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

            Kommentar


            • #7
              Habs gestern noch einmal so probiert:

              PHP-Code:
              if ( $anzahl != (INT) $anzahl )
              {
                  
              $anzahl ="";

                  echo 
              " - es sind nur ganze Zahlen zulässig";

              Trotzdem wurden alle Eingaben als gültig gewertet, woran könnte das liegen
              Wenn du dir die Anwender deiner Programme als Idioten vorstellst, werden auch nur Idioten deine Programme verwenden.
              - Linus Torvalds

              Kommentar


              • #8
                Wie hausl schon meinte, ctype_digit um auf Ganzzahlen zu prüfen
                + aus dem Handbuch

                Hinweis:

                Diese Funktion ist nur sinnvoll wenn der Eingabeparameter ein string ist, ein integer Wert als Eingabe wird immer FALSE als Ergebnis liefern. Da auch numerische HTML-Formulareingaben immer als String übergeben werden hat die Funktion hier dennoch ihren Sinn. Siehe auch den types Abschnitt des Handbuchs.

                Hinweis:

                Wenn ein integer zwischen -128 und 255 (inklusive) übergeben wird, wird dieser als ASCII Wert eines einzelnen Buchstabens interpretiert (zu negativen Werten wird 256 dazu addiert, um Buchstaben des Erweiterten ASCII Zeichensatzes zu erlauben). Alle anderen Integer werden wie ein String interpretiert, welcher die dezimalen Ziffern des Integers enthält.
                Relax, you're doing fine.
                RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

                Kommentar


                • #9
                  Zitat von Nitamund
                  Trotzdem wurden alle Eingaben als gültig gewertet, woran könnte das liegen
                  Werden sie nicht (jedenfalls nicht generell alle Eingaben), wenn du nicht vorher irgendeinen Unsinn machst.

                  PHP-Code:
                  $anzahl '1.2';

                  if ( 
                  $anzahl != (INT) $anzahl ) {
                      echo 
                  'falsch';
                  }

                  // falsch 
                  Ist aber trotzdem nicht gut, weil du da so was wie "10blub" als Eingabe durchkriegst, denn für "==" (und "!=") gilt:

                  If you compare a number with a string or the comparison involves numerical strings, then each string is converted to a number and the comparison performed numerically. These rules also apply to the switch statement. The type conversion does not take place when the comparison is === or !== as this involves comparing the type as well as the value.
                  - http://php.net/manual/en/language.op...comparison.php



                  ctype_digit prüft nicht auf Ganzzahlen, sondern darauf, ob ein String nur aus Ziffern besteht.

                  "007" wäre dabei true, "-12" wäre false.

                  Kommentar


                  • #10
                    Zitat von mermshaus Beitrag anzeigen

                    ctype_digit prüft nicht auf Ganzzahlen, sondern darauf, ob ein String nur aus Ziffern besteht.

                    "007" wäre dabei true, "-12" wäre false.
                    Hab es jetzt noch einmal mit ctype_digit, da ich auch nur positive Werte haben möchte(Habe das vergessen zu erwähnen, tut mir leid).

                    Leider hat es auch so nicht geklappt:

                    PHP-Code:
                    if (is_string($anzahl)){
                        if(
                    ctype_digit($anzahl)){

                        }
                        else{
                            
                    $anzahl "";
                        }
                    }
                    elseif (
                    is_numeric($zahl)){
                        if(
                    is_int($zahl)){

                        }
                        else{
                           
                    $anzahl="";
                        }

                    Wenn du dir die Anwender deiner Programme als Idioten vorstellst, werden auch nur Idioten deine Programme verwenden.
                    - Linus Torvalds

                    Kommentar


                    • #11
                      PHP-Code:
                      $anzahl filter_var($_GET['anzahl'], FILTER_VALIDATE_INT, array(
                          
                      'options' => array(
                              
                      'min_range' => 1
                          
                      )
                      ));

                      if (
                      false === $anzahl) {
                          echo 
                      'Eingabe ist keine positive Ganzzahl im unterstützten Wertebereich' "\n";
                      } else {
                          
                      var_dump($anzahl);

                      Kommentar


                      • #12
                        Zitat von mermshaus Beitrag anzeigen
                        PHP-Code:
                        $anzahl filter_var($_GET['anzahl'], FILTER_VALIDATE_INT, array(
                            
                        'options' => array(
                                
                        'min_range' => 1
                            
                        )
                        ));

                        if (
                        false === $anzahl) {
                            echo 
                        'Eingabe ist keine positive Ganzzahl im unterstützten Wertebereich' "\n";
                        } else {
                            
                        var_dump($anzahl);

                        Danke, so hat es geklappt
                        Werde mich nun erstmal damit auseinandersetzen was deine Befehle genau bedeuten...

                        mfg Nita
                        Wenn du dir die Anwender deiner Programme als Idioten vorstellst, werden auch nur Idioten deine Programme verwenden.
                        - Linus Torvalds

                        Kommentar

                        Lädt...
                        X