Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] [ERLEDIGT]Zahlen eingabe mit 2 Nachkommastellen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] [ERLEDIGT]Zahlen eingabe mit 2 Nachkommastellen

    Hallo,
    ich habe ein Formular wo man in einem Feld Beträge eintippt.
    Leider werden die 2 Nachkommastellen nur in die DB eingetragen wenn man einen Punkt(z.b. 10.10 €)setzt und nicht wenn man ein Komma schreibt (zb. 10,10€).

    Die DB Spalte ist als Decimal(10,2) defeniert. Ist das ein generelles Problem oder liegt es an meinem Code:

    Form:
    PHP-Code:
    p>
     <
    label> <img src='img/up.png' width='24' height='24' />Einzahlung:
     <
    input type='text' name='einzahlung' value='" . $einzahlung . "' size='35'>
     </
    label>
    </
    p
    PHP-Code:
    $einzahlung = isset($_POST["einzahlung"]) ? $_POST["einzahlung"] : ""// Einzahlung 
    PHP-Code:
    // Daten eintragen
      
    if (mysql_query("INSERT INTO `kassenbuch`
       SET
        `name` = '" 
    mysql_real_escape_string($name) . "', 
        `verwendungszweck` = '" 
    mysql_real_escape_string($verwendungszweck) . "', 
        `einzahlung` = '" 
    mysql_real_escape_string($einzahlung) . "', 
        `abbuchung` = '" 
    mysql_real_escape_string($abbuchung) . "'
       "
    )) {
       echo 
    "<p>Die Daten wurden eingetragen.</p>";
      }
      else {
       echo 
    "<p>Fehler beim eintragen der Daten!</p>" ;
      } 

  • #2
    Du könntest mit str_replace() Kommas durch Punkt ersetzen, was Dir aber Probleme bei Eingaben von bspw 1.000,00 bereitet.
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      Da könnte er dann zb vorher die Punkte entfernen und danach Kommas zu Punkten machen, da er die Punkte (thousand seperator) in der DB eh nich benötigt.
      Wenn du die intl extension hast, kannst du auch NumberFormatter benutzen:
      http://php.net/manual/de/numberformatter.parse.php

      Alternativ kannst du mit money_format auch zu deinem Ziel kommen.

      Kommentar


      • #4
        Also ich habe es jetzt erstmal so gelöst

        PHP-Code:
        $einzahlung str_replace(",","."$einzahlung);
        $abbuchung str_replace(",","."$abbuchung); 
        ist in erster line nur ein workaround, aber bis ich eine bessere lösung gefunden habe sollte es reichen



        @sycrog: werd mir auch mal deinen vorschlag angucken und evtl umsetzten.

        Kommentar


        • #5
          Wenn ich also jetzt 10.50€ eingebe, ist es wiedderum kaputt?

          Im Übrigen solltest du auf die mysql_-Extension verzichten und lieber PDO oder mysqli benutzen, da mysql_ ab PHP5.5 veraltet ist.
          Crashkurs zum Thema Rechtschreibung: [COLOR="Green"]normalerweise[/COLOR] ([COLOR="Red"]normaler weise[/COLOR] oder [COLOR="Red"]normaler weiße[/COLOR]), [COLOR="DarkGreen"]Standard[/COLOR] ([COLOR="Red"]Standart[/COLOR]), [COLOR="DarkGreen"]eben[/COLOR] ([COLOR="Red"]ebend[/COLOR])

          Kommentar


          • #6
            ach klar, asterixus, das hab ich natürlich nicht bedacht ^^

            Könnte man einfach lösen, in dem man str_replace nur einsetzt, wenn der type != float ist, da 10,10 ja ein string ist.

            PHP-Code:
            if(!is_float($_POST["einzahlung"]))
            {
                
            // str_replace();

            Wobei das natürlich nicht optimal ist, da 11.111,11 vom typ string ist.
            Da hast du eben die Möglichkeit die intl extension zu benutzen oder den db field type zu ändern.

            Kommentar


            • #7
              Was genau meinst du mit kaputt?

              Kommentar


              • #8
                Das war bezogen auf:

                Zitat von sycrog
                Da könnte er dann zb vorher die Punkte entfernen

                Kommentar


                • #9
                  Am sinvollsten wäre es wohl, wenn man schaut ob die Eingabe Punkte enthält und wenn ja einfach einen Fehler ausgibt der sagt, dass nur Zahlen ohne tausender Trennung und Komma als Dezimaltrennzeichen angenommen werden.

                  Kommentar


                  • #10
                    Ja das stimmt wohl.
                    So da das Problem erstmal gelöst ist,
                    sage ich danke und erledigt.

                    Kommentar


                    • #11
                      Du kannst natürlich auch eine eigene function schreiben, die strings korrekt in float umwandelt.

                      PHP-Code:
                      function str_to_float($str
                      {
                          
                      $pos strrpos($str strtr(trim(strval($str)), ',''.'), '.');
                          return (
                      $pos === false floatval($str) : floatval(str_replace('.'''substr($str0$pos)) . substr($str$pos)));

                      Kommentar


                      • #12
                        Nur leider durchblicke ich das noch nicht da ich recht neu in PHP bin und gerade grundlagenforschung betreibe.

                        Kommentar


                        • #13
                          Ja, deswegen habe ich dir ja eine fertige Funktion geliefert.

                          Beispiel:
                          PHP-Code:
                          $einzahlung str_to_float($_POST['einzahlung']); 

                          Kommentar


                          • #14
                            Dann sage ich mal danke und werde versuchen diese auch halbwegs zu verstehen

                            Kommentar


                            • #15
                              Zitat von sycrog Beitrag anzeigen
                              ach klar, asterixus, das hab ich natürlich nicht bedacht ^^

                              Könnte man einfach lösen, in dem man str_replace nur einsetzt, wenn der type != float ist, da 10,10 ja ein string ist.

                              PHP-Code:
                              if(!is_float($_POST["einzahlung"]))
                              {
                                  
                              // str_replace();

                              Wobei das natürlich nicht optimal ist, da 11.111,11 vom typ string ist.
                              Da hast du eben die Möglichkeit die intl extension zu benutzen oder den db field type zu ändern.
                              Da is_float() auch den Typen analysiert und der Inhalt einer Post-Variable nur NULL, String oder Array sein kann, ist das eine schlechte Methode.
                              Crashkurs zum Thema Rechtschreibung: [COLOR="Green"]normalerweise[/COLOR] ([COLOR="Red"]normaler weise[/COLOR] oder [COLOR="Red"]normaler weiße[/COLOR]), [COLOR="DarkGreen"]Standard[/COLOR] ([COLOR="Red"]Standart[/COLOR]), [COLOR="DarkGreen"]eben[/COLOR] ([COLOR="Red"]ebend[/COLOR])

                              Kommentar

                              Lädt...
                              X