![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 11.02.2016 Ostrzeżenie: (0%) ![]() ![]() |
Mam pewien problem, który wygłąda następująco: Po kliknięciu danego przycisku, strona przesyła trzy wartości do innych kolumn. Chodzi dokładniej o same liczby, jednak są to bardzo duże liczby. Gdy liczba jest nie duża, nie ma problemu, jednakże gdy np. wartość 1: 321.456.789.123.456 , 2 wartość podobnego rozmiaru i trzecia też to już wyskakuje błąd .
Przykład z innymi wartościami i błąd: Message: SQL Error: Out of range value for column 'kolumna3' at row 1 Query Code: UPDATE baza_danych SET kolumna1= kolumna1- 1.7105114972088E+14, kolumna2= kolumna2- 1.9002036318352E+14, kolumna3= kolumna3- 1.9002036318352E+14 WHERE id = 1; Jak mogę rozwiązać ten problem? Próbowałem zmienić w strukturach bazy danych typ na bigint(20) albo double(50,6) jednakże błąd się powtarza. Pola te mają obsługiwać jedynie ogromne liczby. Ten post edytował matimax 11.02.2016, 17:22:41 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 879 Pomógł: 230 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) ![]() ![]() |
Coś musisz mieć nie tak:
Ja wykonuje w PHPMyAdmin taki kod: Kod UPDATE `tabela` SET `big` = `big` + 1.9002036318352E+14 i spokojnie mi sumuje te duże liczby [bigint(100)] - sprawdź co masz dla kolumna3, bo może jej nie ustawiłeś wartości bigint. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
serwer 32 czy 64 bit?
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 11.02.2016 Ostrzeżenie: (0%) ![]() ![]() |
debian-7.0.32bity--RepoPL, jeśli dobrze Cię zrozumiałem.
To jest najtańszy serwer VPS mintshost, który służy mi do nauki. gdy wprowadzę tak duże kwoty np. 150.000.000.000.000 x 3 to wchodzi ok, a gdy np. 148.531.561.971.675 x 3 to już błąd ;/. Czy da się to jakoś zrobić tak, żeby przyjmowała baza takie duże wartości? w mysql, zlotowka, funt, dolar są typami: bigint (20) , atrybut- unsigned. Czy może jak zmienie na inne wartości np. bigint z wartością (100) lub na double będzie to działać poprawnie?... Edit: Może żeby było jaśniej, chciałem zrobić coś na zasadzie prostego banku na stronie, w który można wpłacać wirtualne pieniądze, a potem je wypłacać. czyli praktycznie coś prostego, co dziwne, wpłata takich dużych wartości odbywa się bez problemu, przy okazji zabierając 20% wpłacanej kwoty. pojawia sę normalnie w banku, a przy wypłacie już jest problem. EDIT: Można powiedzieć, że problem jest "rozwiązany". Wydaje mi się, że cos schrzaniłem w php z zapytaniaim, bo działają mi dwie waluty, tylko z jedną jest problem i tylko przy wypłacie. Jednak dupa, siedzę nad tym już trzeci dzień i nie wiem co jest nie tak, zmieniałem już typy kolumny w tabeli ale to nie pomagało.. może coś jest zle w kodzie? poniżej kod odpowiadający za wypłatę:
Ten post edytował matimax 12.02.2016, 16:58:08 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 342 Pomógł: 23 Dołączył: 20.01.2011 Skąd: Chełm Ostrzeżenie: (0%) ![]() ![]() |
Może to głupi pomysł ale spróbuj zamienić tam bigint-a czy co tam masz na text. W php i tak się sprawdza czy wartość jest liczbą czy nie.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 11.02.2016 Ostrzeżenie: (0%) ![]() ![]() |
rzeczywiście surowce zaczęło wpłacać, na to nie wpadłem, potestuje jeszcze ale wydaje mi się, że działa.
Edit: Przy niektórych dużych kwotach, po wypłacie wszystkich walut (dokładnie takich kwot jakie pokazują się, że powinny być w banku) czasem robią się wartości na -, np. tak jak teraz: zloty = -3 funt = 3 na plusie dolar= -2. Myślałem, że : if($bZloty < '0'){$this->printMessage('error_1', 'game.php?page=logout');} elseif($bFunt < '0'){$this->printMessage('error_2', 'game.php?page=logout');} elseif($bDolar < '0'){$this->printMessage('error_3', 'game.php?page=logout');} elseif($bZloty == '0' && $bFunt == '0' && $bDolar == '0'){$this->printMessage(['wprowadz jakąś kwotę'], wystarczy, a jednak jeszcze coś jest nie tak ;/ Ten post edytował matimax 12.02.2016, 17:33:48 |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Masz system 32bit i to jest Twój problem.
Używaj tego: http://php.net/manual/en/book.bc.php do dodawania liczb. Zapisuj je w w Bigint (ew. varchar jeśli nie poskutkuje). |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 09:18 |