Hallo,
Ik heb het volgende probleem:
De records worden soms niet op tijd opgeslagen wanneer een gebruiker erg snel handelingen uitvoerd.
Stel gebruiker Henk heeft 1.000 op zak, en klikt rustig op een bepaalde optie (Die bijvoorbeeld 100 kost) en gaat de gebruiker steeds 100 omlaag.
Maar wanneer dit erg snel gebeurt is soms de check of je meer als 100 hebt geldig, terwijl de speler vervolgens op een negatief saldo komt.
<?php
if($gebruikerinfo->contant < 75000){
echo "Je hebt niet genoeg geld op zak.";
// Hier nog meer code
exit();
}
mysqli_query($connection, "update users set `contant`=`contant`-75000 where user='".$ingame."'");
// Hier nog meer code
if($gewonnen){
mysqli_query($connectie, "update users set `contant`=`contant`+250000 where user='".$ingame."'");
}
?>
Toon Meer
Hierboven even een kort voorbeeldje van de situatie.
Er word gebruik gemaakt van een MyISAM tabel in MySQL.
Het veld dat word aangepast betreft een INT veld.
Er word gebruik gemaakt van een VPS, dus alle settings zijn aan te passen in de configs.
Er is maar 1 persoon actief op een account, dus er zouden niet meerdere aanvragen tegelijk moeten komen.
Echter als een speler erg snel de pagina gaat vernieuwen lijkt het erop dat deze soms tegelijk worden uitgevoerd.
Zelf vermoed ik dat het het mogelijk aan locking (Of het gebrek aan) ligt, of dat het ophalen van de gebruikersgegevens word gecached.
$gebruikerinfo is een verzameling van gegevens die uit de database word gehaald aan het begin van de pagina laden, is het mogelijk dat deze read opdracht word gecached omdat het in dezelfde seconde (Of erg korte periode) plaats vind als de vorige aanvraag ?
Hoe zou ik het beste het probleem kunnen vinden ?
En waarop zou ik kunnen zoeken om tot de juiste functie of instelling te komen om dit probleem op te lossen ?
Alvast bedankt,
Pekelterror