Visualizzazione risultati 1 fino 2 di 2

Discussione: inserire valori in euro sia con punto che con virgola

  1. #1
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito inserire valori in euro sia con punto che con virgola

    Ciao

    Inserisco nel db (in campi di tipo decimal (10,2)) valori in euro.
    L'utente deve inserire però i decimali utilizzando SOLO il punto.
    In poche parole per inserire 1.200,50 euro deve
    da tastiera fare 1200.50

    Questo perchè il campo del db ospita valori di questo tipo (che poi al momento della visualizzazione stampo utilizzando number_format($cassa, 2, ',', '.') ad esempio).

    Vorrei fare in modo che l'utente possa inserire i decimali anche con la virgola, tranne poi convertirli con il punto per il db al momento dell'upload.
    Cosa devo fare?

    Grazie

  2. #2
    Guest

    Predefinito

    prima cosa prendi il valore immesso dall'utente e e cerchi se ci sono virgole dato che per errore possono aver inserito solo virgole, se ce ne sono più di due devi decidere te se rimandarlo indietro all'utente o formattarlo in qualche modo, ma fidandoti che comunque il dato sia giusto.
    Se decidi che comunque va formattato allora procedi cercando da subito l'ultimo punto o virgola inseriti.
    Codice PHP:
    $decimali = substr($valore), strripos($valore, '.'); // prima prova col punto
    // se non ci sono punti cerca con la virgola.
    if ($decimali === false) $decimali = substr($valore), strripos($valore, ',');
    // Ora in decimali ci sono... i decimali :D
    $dec = strlen($decimali);
    $punti = array('.' => '', ',' => '');
    $unita = strtr(substr($valore, -$dec), $punti);
    $valore = (double)($unita . '.' . $decimali);
    In pratica prima controlli se ci sono punti ed estrai i decimali, se non ci sono punti ma virgole estrai comunque i decimali, ora hai in decimali i decimali inseriti.
    Poi chiedi quanto è lunga la stringa decimali, ti servirà dopo.
    Ora trasformi strtr() tutti i punti e/o i decimali presenti nella stringa in un nulla di nulla e contestualmente togli anche i decimali presenti dato che dovrai sommare quelli presi prima senza creare un errore.
    Quindi in $unita hai l'unità (intero fai tu) senza punteggiatura di alcun tipo, a cui sommi la stringa $decimali con il punto davanti e contestualmente ne fai il casting per trasformare il tutto in double da passare al database.
    Complicato? Sì e sicuramente si poteva fare di meglio!
    Meglio era formattare già il form con due caselle, una per l'intero e una per i decimali, così non indurresti nessuno all'errore e poi in fase di riassemblamento avresti solo dovuto togliere ogni segno di punteggiatura dall'intero e mettere un punto davanti ai decimali.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •