login  Naam:   Wachtwoord: 
Registreer je!
 Forum

BIGINT!? (Opgelost)

Offline Ricky - 02/04/2007 13:35 (laatste wijziging 02/04/2007 16:06)
Avatar van RickyPHP beginner Hey SiMa,

In mijn SQL database heb ik een veld BANK, met als kenmerk BIGINT (hiervan is het maximum toch 9.223.372.036.854.775.807 ?). Op het moment dat er 1.000.000.000.000 staat, en ik er 1 vanaf haal gaat het goed, maar als ik die 1 er weer bij zet (met een query) gaat het mis... dan verdwijnt de complete som en wordt het een 1.

Hoe kan dit? Want verder werkt het wel altijd...

Edit: het probleem is dus dat PHP er 1E+5 van maakt, en MySQL vindt dat natuurlijk geen integer.... ik heb het maar opgelost met de meest simpelste manier: als het getal onder de 1 triljard zit, dan wel toestaan, anders weigeren aan te passen.

5 antwoorden

Gesponsorde links
Offline Voldemort - 02/04/2007 13:42
Avatar van Voldemort PHP ver gevorderde 1) http://dev.mysq...types.html

2) Kan je je query eens laten zien?

3) Overigens kan het zijn dat MySQL zo redeneert:

1 000

wordt

000

dus is dat hetzelfde als

0

Via de query gaat er 1 bij, dus

1

Zo zou het kunnen zijn hoewel ik dat niet zeker weet.
Offline Ricky - 02/04/2007 13:46 (laatste wijziging 02/04/2007 14:15)
Avatar van Ricky PHP beginner 1) het getal gaat dus niet over de limiet
2)
  1. <?php
  2. $newgeld = $fetchit["geld"] - $_POST["bankbedrag"];
  3. $newbank = $fetchit["bank"] + $_POST["bankbedrag"];
  4. mysql_query("UPDATE `members_stats` SET `geld`='" . $newgeld . "' ,`bank`='" . $newbank . "' WHERE `mid`='" . $_COOKIE["mid"] . "'") or die(mysql_error());
  5. ?>

3) volgens mij is dat niet het geval... daarnaast post ik zonder spaties en punten... die puntjes heb ik er even tussengezet voor de duidelijkheid.

Edit: 1 stap verder: PHP maakt er dus 1E+5 van ofzo... maar als ik intval() gebruik om de optelsom heen*, dan maakt hij van 1000 miljard 1 miljard (laatste 3 nullen weg dus)

Hoe ga ik dit dan weer oplossen??:s

* zo dus:
  1. <?php
  2. $newgeld = intval($fetchit["geld"] - $_POST["bankbedrag"]);
  3. $newbank = intval($fetchit["bank"] + $_POST["bankbedrag"]);
  4. mysql_query("UPDATE `members_stats` SET `geld`='" . $newgeld . "' ,`bank`='" . $newbank . "' WHERE `mid`='" . $_COOKIE["mid"] . "'") or die(mysql_error());
  5. ?>
Offline Dark_Paul - 02/04/2007 14:19
Avatar van Dark_Paul PHP ver gevorderde Even offtopic, maar waarom gebruik je geen sessies om 'mid' in op te slaan. Die cookies kan ik aanpassen en daardoor kan ik het geld van anderen beheren.
Als je zo ook geld kan overmaken naar elkaar, kan ik dus zelf het geld van iemand overmaken naar mijn 'bankrekening'.
Offline Voldemort - 02/04/2007 14:31
Avatar van Voldemort PHP ver gevorderde @Dark_Paul: Ik gebruik ook cookies en als je bij mij wat aanpast werkt het niet hoor. Dus cookies zijn veilig als je weet hoe je ze moet beveiligen tegen dingen als jij zegt.

@Ricky: intval zou moeten werken om dit op te lossen, deze maakt namelijk van 1E+5 dit 100000.
Offline Ricky - 02/04/2007 15:22 (laatste wijziging 02/04/2007 15:29)
Avatar van Ricky PHP beginner @Dark_Paul: ik controleer in een config file of username en password inderdaad zo in de db staan... onvervalsbaar 

@Voldemort: maar op de een of andere manier verdwijnen er 3 nullen... nu werd hij net zelfs negatief ofzo :S

$newbank werd nu opeens dit: 2147483646... en de var ziet er zo uit: $newbank = intval($fetchit["bank"]) + $_POST["bankbedrag"];

WTF!?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.198s