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.