MSSQL Währung aus Benutzereingabe schreiben

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

  • MSSQL Währung aus Benutzereingabe schreiben

    Hallo,

    ich habe eine Spalte vom Typ money in einer MS-SQL-Datenbank. Die Ausgabe mit PHP per money_format ist kein Problem - jetzt hätte ich es gerne andersrum. Der Benutzer soll bzw. "1.000,00 EUR" eingeben können und irgendwie muss "1000.00" beim SQL-Server ankommen.

    Gibt's da was von PHP das ich noch nicht gefunden habe?

    Wenn ich "1.000,00 EUR" als float übergebe trägt der SQL-Server immerhin schon mal 1 ein -> da der Punkt hier als Dezimaltrenner erkannt wird. Durch die Übergabe als Float verschwindet " EUR".

    Muss ich jetzt tatsächlich mit RegEx oder sonstigem replace die Eingabe passend machen?

    Vielen Dank für eure Hilfe.

  • #2
    Re: MSSQL Währung aus Benutzereingabe schreiben

    Original geschrieben von Patrick_PQ
    Muss ich jetzt tatsächlich mit RegEx oder sonstigem replace die Eingabe passend machen?
    ja, vermutlich.

    was spricht dagegen ...?
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      wäre doch schön gewesen, wenn es da bereits einen Befehl / eine Funktion in PHP gibt um einen String mit bestimmtem Format als numerischen Wert zurück zu geben - halt wie number_format, nur andersrum ...

      Kommentar


      • #4
        so, habe jetzt folgendes versucht:
        Code:
        preg_match("/(\d+)\.(\d+)\,(\d+).*/s",$_POST['betrag'],$matches);
        Wenn ich nun 10.000,00 EUR eingeben bekomme ich in $matches aufgeteilt 10 --- 000 --- 00 zurück. Wenn der User allerdings 10 eingibt kommt gar nix raus.

        Nachdem ich das Tut von Sky noch mals zu rate gezogen haben ist mir auch klar, warum das so ist. Und jetzt wird's schwierig für mich.

        Kann mir mal jemand helfen und erklären wie ich für dieses Problem einen passenden pattern erstelle?

        Vielen Dank!

        Kommentar


        • #5
          wie du punkte und kommas tauschst steht hier im forum (sei kreativ), dann kannst du auch wunderbar mit (int)$_POST['betrag'] eintragen.

          Kommentar


          • #6
            @TobiaZ: hab schon gesucht - zu dem Thema gibt es einiges ... natürlich könnte ich die Punkte entfernen und anschließend das Komma durch einen Punkt ersetzen. Das wäre vermutlich einfacher - hast du das so gemeint ?!

            Kommentar


            • #7
              wäre ein weg

              wenn du es allerdings so machst, wie wahsaga (mit regex), dann hast du automatisch die prüfung drinne.

              Kommentar


              • #8
                @TobiaZ: aus genau diesem Grund würde ich es auch gerne mit RegEx machen ... aber mein Versuch oben führt ja nur halb zum Ziel. Ich könnte da ja noch mit ODER die anderen Varianten hinzufügen, aber das geht doch bestimmt auch einfacher - oder ?!

                Leider ist das was ich oben gepostet habe fast schon das äußerste was ich mit RegEx hinbekomme. Nach etlichen Seiten suchen "regex, preg_match komma, punkt" habe ich dort auch nichts gefunden was mich weiter bringt.

                Gib mir mal einen Tipp wie ich den pattern erstellen muss um so ein Konstrukt auszuwerten.

                P.S. mit floatval und str_replace habe ich jetzt erstmal eine Lösung die funktioniert - bin an der RegEx Lösung trotzdem interessiert.

                Kommentar


                • #9
                  hast du unser tut gelesen

                  Kommentar


                  • #10
                    ja, hab ich (BTW habe ich oben bereits erwähnt). Ich würde doch nie Fragen zu etwas stellen ohne mich zuvor ausgiebig ins Thema einzulesen - gibt es wirklich Leute die sowas tun ?

                    Mit meinem Wissen über RegEx habe ich folgendes zustande gebracht:

                    Code:
                    preg_match("/(\d+)\.*(\d+)\,*(\d+).*/",$_POST['betrag'],$matches);
                    Das führt mich allerdings nicht ganz ans Ziel, weil

                    Eingabe:1000
                    Ausgabe: Array ( [0] => 1000 [1] => 10 [2] => 0 [3] => 0 )
                    ---
                    Eingabe: 1000,00
                    Ausgabe: Array ( [0] => 1000,00 [1] => 100 [2] => 0 [3] => 00 )
                    ---
                    Eingabe:10.000,00
                    Ausgabe: Array ( [0] => 10.000,00 [1] => 10 [2] => 000 [3] => 00 )
                    ---
                    Eingabe: 10.000
                    Ausgabe: Array ( [0] => 10.000 [1] => 10 [2] => 00 [3] => 0 )

                    Wie kann ich verhindern, dass unnötig aufgeteilt wird ? Bei der ersten Eingabe hätte ich lieber Array ( [0] => 1000 [1] => 1000) und gut.

                    Du verstehst was ich meine ... ?

                    Kommentar

                    Lädt...
                    X