Kom ihåg mig?
Home Menu

Menu


PHP max $_POST int[2147483647]?

Ämnesverktyg Visningsalternativ
Oläst 2006-12-15, 18:03 #1
sAe sAe är inte uppkopplad
Medlem
 
Reg.datum: Dec 2006
Inlägg: 51
sAe sAe är inte uppkopplad
Medlem
 
Reg.datum: Dec 2006
Inlägg: 51
Hej!

Har stött på detta udda problem länge, men har inte lagt någon tid på att fixa det.

Jag antar att det har med $_POST att göra, en $variabel = 11111111; har i princip ingen maximal längd så..

Varför detta tal som max? 214 748 3647? Högre tal än så, skickade via en form ($_POST) blir nertrubbade till just det talet.

En lösning på detta vore toppen!
sAe är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-12-15, 18:49 #2
Dykarn Dykarn är inte uppkopplad
Flitig postare
 
Reg.datum: Feb 2005
Inlägg: 488
Dykarn Dykarn är inte uppkopplad
Flitig postare
 
Reg.datum: Feb 2005
Inlägg: 488
signed 32-bit integer value
ar nog det du soker ...

Mer info

las langt ner
Dykarn är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-12-15, 19:00 #3
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
Det låter dock konstigt att php skulle skicka värdena som integers. Det låter faktiskt snarare som någon slags javascripts check som går snett. PHP skiter rätt högaktningsfullt i typningen och skickar allting som strängar mig veterligen.
grazzy är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-12-15, 20:24 #4
jonny jonny är inte uppkopplad
Supermoderator
 
Reg.datum: Sep 2003
Inlägg: 6 941
jonny jonny är inte uppkopplad
Supermoderator
 
Reg.datum: Sep 2003
Inlägg: 6 941
Om du skriver ut informationen du tagit emot, har den minskat då?
jonny är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-12-15, 21:02 #5
kullervos avatar
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2003
Inlägg: 1 519
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
kullervos avatar
 
Reg.datum: Dec 2003
Inlägg: 1 519
Eftersom PHP sätter typerna automatiskt tas strängen med decimaltalet emot som ett heltal. Oavsätt om du kan få PHP att lagra integers större än 32 bitar (vet inte om det går men jag skulle inte tro det) bör du ställa dig frågan om du verkligen vill pyssla med det. Det är enormt stora tal det handlar om så min magkänsla säger att du försöker göra något som inte är riktigt vettigt.
kullervo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-12-16, 16:24 #6
sAe sAe är inte uppkopplad
Medlem
 
Reg.datum: Dec 2006
Inlägg: 51
sAe sAe är inte uppkopplad
Medlem
 
Reg.datum: Dec 2006
Inlägg: 51
Citat:
Originally posted by Dykarn@Dec 15 2006, 19:49
signed 32-bit integer value
ar nog det du soker ...

http://farm.tucows.com/blog/Funny/_archives/2005/10

las langt ner
Japp exakt det är det


signed 32 bit int.

Frågan är varför den väljer att göra så, php kan ju hålla större tal än så.


Läser man lite där så märker man ju att google hade samma problem,
men det är ju löst nu när man söker. Och vad jag vet så går det inte att
själv sätta typer?


Grejen är att problemet uppstår när folk i mitt spel vill överföra pengar
till varandra. Därför är det ganska viktigt om det går att hitta någon lösning.

Som sagt har jag inte kikat riktigt på problemet, jag ska jonnys tips och ta
reda på vart det blir trimmat.

Men det behövs fortfarande en lösning :blink:
sAe är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-12-16, 18:47 #7
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Citat:
Originally posted by kullervo@Dec 15 2006, 22:02
Eftersom PHP sätter typerna automatiskt tas strängen med decimaltalet emot som ett heltal.
Fel. Allt som kommer med $_GET eller $_POST kommer som en "oförstörd" sträng, precis som den skickas i HTTP-requesten.

Om du tittar på det inkommande värdet med t ex var_dump så får du:
string(30) "234623463452346352345675472634"
Det finns alltså ingen begränsning för hur stora tal du kan skicka till php.
(omvandling sker först när man försöker använda det aritmetiskt och inte som sträng)

Däremot har alla programmeringsspråk i slutändan någon gräns för hur stora tal och med hur stor precision man kan använda. För heltal (int) med full precision gäller i php den gräns som det underliggande systemet har. PHP har inga fastlagda gränser som t ex Java för hur stor en int ska vara. Ofta är det 32 bitar som ger ett ganska litet tal. Allt som är över värdet 2147483647 tilldelas då detta värde eftersom det är det största 32-bits värdet. En del varianter av PHP har 64 bitars int vilket ger värden upp till 9223372036854775807.

Citat:
Och vad jag vet så går det inte att
själv sätta typer?
Klart det går! Med (typ)$variabel sätter du alla php:s typer.

sAe: Om du vill få ut något vettigt ur så stora tal så får du antingen:

1. om du inte behöver så stor precision så kan du använda float genom att "typ-kasta":
$num = (float)$_POST['num'];
(vilket ger t ex float(2.3462346345235E+29) med talet överst) detta kan du sedan addera etc som vanligt. Då kan du ju skriva typ "Du har nu 114 miljarder" och slipper räkna med 9 nollor extra.

2. skriva egna funktioner som med t ex substr etc delar upp heltalssträngen och gör beräkningar och sedan lämna tillbaka talet som en sträng igen.

3. se efter om det finns någon modul (eller utveckla en själv) till php för typ vetenskapliga beräkningar etc där stora tal med hög precision är möjlig.

Rimligast tycker jag nog kanske det vore om du övergick till någon enklare lösning om det bara gäller ett spel! Använder du grekiska drachmer?? B)
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-02-04, 15:23 #8
sAe sAe är inte uppkopplad
Medlem
 
Reg.datum: Dec 2006
Inlägg: 51
sAe sAe är inte uppkopplad
Medlem
 
Reg.datum: Dec 2006
Inlägg: 51
Först och främst, tack för ditt svar Martine. Det var mycket givande och jag ska se till att sätta typer på mina int...

Jag har aldrig sett förrut att man kunde sätta typer på sina variabler, det var nytt för mig. Men var dag lär man sig ju alltid något nytt?

Grekiska drachmer skulle kunna vara en bra jämförelse

Problemet har uppstått på senare tid när ekonomin har skjutit i höjd i mitt spel.
Något obalanserat av mig från början, men inget jag kan göra åt nu, mitt upp i spelets runda tyvärr.

Tack ännu en gång, det här lär lösa mitt problem.
sAe är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 13:57.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017