Ankündigung

Einklappen
Keine Ankündigung bisher.

prüfen ob $_POST['preiseingabe'] gültig ist

Einklappen

Neue Werbung 2019

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

  • prüfen ob $_POST['preiseingabe'] gültig ist

    Hallo.
    Ich möchte prüfen ob $_POST['preiseingabe'] gültig ist. Und zwar ob es eine Ganz- / Dezimal- und/oder eine Zahl mit Tausendern Trennpunkten ist. Wie mach ich das?

    Soweit bin ich schon:

    PHP-Code:
    $eingabe str_replace(',''.'$_POST['preiseingabe']);

        if (
    is_numeric($eingabe) || is_float($eingabe)) {

        
    $preiseingabe round($eingabe2); 
    Ich glaube, dass man die Eingabe für die Datenbank, wenn die Eingabe mit Tausendern Trennpunkten ist, für die Datenbank in eine einfache Dezimalzahl ohne Trennpunkte formatieren muss. Wenn Ja, brauche ich hier auch ein bisschen hilfe...

    Gruß

    king-ich

  • #2
    Probier mal dieses Script aus und spiele mal damit herum.
    Gebe mal Werte über 1000 ein.
    Var_dump zeigt hier den tatsächlich übergebenen Paramater an.

    Das ganze CSS und HTML liest du bitte selber nach.

    PHP-Code:
    <?php
    if ( isset( $_POST['preiseingabe']) ) {
        if ( (float)
    $_POST['preiseingabe'] >= 0.01 && (float)$_POST['preiseingabe'] < 1000 ){
            echo 
    'ok';
        }else{
            echo 
    'not ok, try again';
        }

        
    var_dump($_POST['preiseingabe']);
    }

    ?>

    <!DOCTYPE html>
    <html lang="de">
    <head>
      <meta charset="utf-8">
      <title>Beispiel</title>
      <style>
        label {display: block; margin-top: 1em;}
        input[type=number]::-webkit-outer-spin-button,
        input[type=number]::-webkit-inner-spin-button {
            -webkit-appearance: none;
            margin: 0;
        }
        input[type=number] {
            -moz-appearance: textfield;
            text-align: right;        
        }
        input[type=number]:not(:focus):invalid + ::after {
            content:' hmm...';
        }
        input[type=number]:valid + ::after {
            content:' ✔';
        }
        input:out-of-range + ::after {
            content:' Preis sollte zwischen 0,01 und 999 999 Euro liegen.';
            color: red;
        }
        input[type=submit] {display: block; color:blue;}
      </style>
    </head>
    <body>
      <h1>Input Number Beipiel</h1>
      <main>
        <form id="form" method="post">
            <label for="preiseingabe">Bitte geben sie ihren Preis in € ein: </label>
            <input id="preiseingabe" name="preiseingabe" type="number" placeholder="Beispiel 12,34" min="0.01" max="999999" step="0.01" value="0.01" required autofocus>
            <span class="validity"></span>
            <label for="beschreibung">Ihr Anzeigentext: </label>
            <textarea id="beschreibung" name="beschreibun" rows="3">
            Ihr Text   
            </textarea>
            <input type="submit">
        </form>

    </body>
    </html>

    Kommentar


    • #3
      Wenn ich 1000er Trennpunkte in das Inputfeld mache kommt der (mich störende, deswegen innerHTML) HTML Fehler...

      Deswegen will ich im PHP Script fragen: if Nummer mit Tausender Trennzeichen...

      In etwa wie bzw gemeinsam mit:

      PHP-Code:
      $eingabe str_replace(',''.'$_POST['preiseingabe']);

          if (
      is_numeric($eingabe) || is_float($eingabe)) {

          
      $preiseingabe round($eingabe2); 
      Geht das irgendwie?

      Kommentar


      • #4
        Es gibt keine Tausendertrennzeichen.
        Schau dir an was in PHP ein float ist.
        Und übergeben wird immer eine Zeichenkette(string).
        du bist echt hartnäckig im begreifen.

        Kommentar


        • #5
          OK.

          Ohne die Zahl zu prüfen, sondern sie Umzuwandeln in eine Dezimalzahl, wenn Sie mit Trennpunkten übergeben wird:

          Von Dezimal kann ich folgender Maßen:

          PHP-Code:
          $preis $reihe['preiseingabe'];
          $preiseingabe number_format($preis2",""."); 
          in eine Zahl mit Trennpunkten umwandeln und ausgeben.

          Das Gleiche muss doch auch umgekehrt gehen ( Von einer Zahl mit Trennpunkten zu Dezimalzahl ).

          Damit ich die zur Dezimalzahl formatierten Zahl in der Datenbank speichern kann...

          PHP-Code:
          $preis $reihe['preiseingabe'];
          $preiseingabe number_format($preisirgendwas); 

          Kommentar


          • #6
            Hast du mein Script denn mal getestet?
            Wenn du als Input Element den Typ number hast, kann keine Zahl mit Tausendertrennzeichen entstehen.
            Behebe dein Problem an der Quelle der Ursache, dann brauchst du dir hinterher nicht so viele Gedanken machen.

            Kommentar


            • #7
              PHP-Code:
              $preis = $reihe['preiseingabe'];
              $preiseingabe = number_format($preis, irgendwas);
              Geht nicht, gerade ausprobiert...

              Kommentar


              • #8
                @protestix

                Ja ich habe Dein Script getestet.

                Ich lass das jetzt sein mit den Tausender Trennpunkten.

                Jetzt bin ich nur noch am suchen für einen RegExp für Javascript, damit ich per innerHTML eine Aufforderung an den User machen kann, eine Dezimalzahl oder Ganzzahl einzugeben.

                Kommentar


                • #9
                  Dies ist der RegExp für eine Dezimalzahl mit Tausender Trennpunkten...

                  Code:
                  /^\d{1,3}(\.\d{3})*\,\d{2}$/
                  Ich brauche einen für Dezimal- / Ganzzahl mit Punkt / Komma Trennung...

                  Kommentar


                  • #10
                    HAB:

                    Code:
                    /^(\d+(?:[\.\,]\d{2})?)$/

                    Kommentar


                    • #11
                      Ich frage mich echt, warum du in einem Forum postet, wenn du eh alle Hinweise und Tipps ignorierst und es dann auf deinen eigenen sehr fehleranfälligen Weg machst.

                      Kommentar


                      • #12
                        @Zeichen32

                        Man kann sich, und das passiert in meinem Script, die Dezimalzahl mit Tausender Trennpunkten ausgeben lassen.

                        PHP-Code:
                        $preis $reihe['preiseingabe'];
                                
                        $preiseingabe number_format($preis2",""."); 
                        Deswegen habe ich ja erst danach gefragt wie man auf Tausender Trennpunkten prüfen kann.

                        ​​​​​​​
                        PHP-Code:
                        ... 

                        Kommentar


                        • #13
                          Zitat von king-ich Beitrag anzeigen
                          @Zeichen32

                          Man kann sich, und das passiert in meinem Script, die Dezimalzahl mit Tausender Trennpunkten ausgeben lassen.
                          https://php-de.github.io/jumpto/float-vereinheitlichen/
                          The string "()()" is not palindrom but the String "())(" is.

                          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


                          • #14
                            Hier wird das EVA-Prinzip deutlich.

                            Eingabe kann in deutschem Format erfolgen
                            Verarbeitung immer nach EDV Muster(decimal point, no thousand separator)
                            Ausgabe kann im Landesformat erfolgen
                            Es sollte wohl auch besser das Leerzeichen statt des Punktes als 3er-Ggruppierungszeichen verwenden werden -> https://de.wikipedia.org/wiki/Schreibweise_von_Zahlen

                            Kommentar


                            • #15
                              Du solltest dafür sorgen, dass per POST ein internationales Format übergeben wird und keine Extrawürstel, dann ersparst du dir auch den Murks mit dem str_replace() oder einer Regex. Denn im Endeffekt bleibt das immer ein Murks und es wird immer Fälle geben, wo Werte fehlerhaft erkannt oder verarbeitet werden.

                              Kommentar

                              Lädt...
                              X