Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapisywanie liczby z . i , w bazie
Forum PHP.pl > Forum > Przedszkole
athabus
Witam,
tworze wlasnie maly i skrypt i natknolem sie na problem z zapisem liczb float w bazie danych.

Z tego co czytam, to mySQL pozwala tylko na zapis z kropka, czyli np. 124.23, ale logicznym jest ze userowi wyswietla sie liczbe z przecinkiem czyli np. 124,23.

Chciałbym zatem spytać:

1) Czy nie można przestawić bazy tak, aby akcpetowała liczby z przecinkami (z tego co widzę po wynikach z wyszukiwarki to chyba się nie da)

2) Jeśli się nie da zmienić ustawienia bazy, to jak wy to rozwiązujecie? Chyba nie robicie ręcznie konwersji typu str_replace czy number_format za każdym razem gdy chcecie zapisać coś do bazy albo wyświetlić userowi?

Myślałem, żeby wykorzystać metodę obietku __set i __get ale to też niewiele daje. Teraz przyjąłem schemta, że wszystkie wartości przechowuje z kropką i maj dodatkową metodę w moim obiekcie, która służy do wyświetlania liczby, ale nie wiem czy to optymalne rozwiązanie.

Będę wdzięczny za wszelkie rady
pawel_k
daj na początku skryptu
  1. <?php
  2. setlocale(LC_ALL, "pl_PL.UTF-8");
  3. ?>
athabus
Dzięki, to rozwiązuje w połowie mój problem biggrin.gif

Tylko mała uwaga - na serwerach windowsowych nalezy wpisac
  1. <?php
  2. setlocale(LC_ALL, "polish_pol");
  3. ?>


To tak jakby chciał ktoś testować lokalnie tak jak ja.

Mam tylko pytania, bo z tego co widzę to dzięki temu liczba wyświetlana userowi jest z przecinkiem(no i oczywiście kilka innych ustawień lokalnych). A czy da się zrobić coś podobnego, aby automatycznie były konwertowane liczby z formularza z np 3,7 na 3.7?

Pewnie nie ma takiej możliwości, bo skąd formularz "ma wiedzieć" że ktoś w danym momencie wpisuje liczbę ale wolę zapytać.
tiraeth
  1. <?php
  2. function comma2dot($integer)
  3. {
  4.  $integer = preg_replace("#([\d]{1,})\,([\d]{1,})#", "\\1.\\2", $integer);
  5.  return $integer;
  6. }
  7.  
  8. echo comma2dot("35,121 Lorem, ipsum. 0,11"); # Return: 35.121 Lorem, ipsum. 0.11
  9. ?>


Wykorzystuje wyrażenie regularne aby można było zamieniać te liczby w całym ciągu znaków smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.