Controle op maximum werkt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Enrique Gervaso

Enrique Gervaso

22/04/2017 09:52:12
Quote Anchor link
Ik ben bezig met een bank script maar de controle op het maximum (capacity) werkt niet wanneer de gebruiker < dan het maximum capacity heeft.

Kortom; bij het storten op de bank met bv een max van 5000 capacity, en de gebruiker heeft bv. 4000 reeds op de bank staan --> dan kan de gebruiker oneindig storten de eerste keer. Wanneer het max overschreden is werkt de controle wel.

Wie kan mij helpen met deze controle goed te krijgen?


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
//Withdraw or deposit
if (isset($_POST['withdraw']) OR isset($_POST['deposit'])) {
    if (!isset($_POST['money'])) {
        $error[] = 'Je hebt geen bedrag aangegeven';
    }
    elseif(!ctype_digit($_POST['money'])) {
        $error[] = 'Het ingegeven bedrag is niet numeriek.';
    }
    // Extra check for php overflow error, so that +/- bug cant be abused
    elseif (strlen($_POST['money']) > 20) {
        $error[] = 'Het bedrag wat je hebt ingevoerd is abnormaal hoog!';
    }
    
    if (!isset($_POST['withdraw']) AND !isset($_POST['deposit'])) {
        $error[] = 'Je hebt niet aangegeven of je geld wilt opnemen of storen!';
    } else {
        if (isset($_POST['withdraw'])) {
            $result = $connection->query('SELECT bank FROM building_bank WHERE user_id = "' . $_SESSION['user_name'] . '"');
            $row = $result->fetch_assoc();
        
            if ($row['bank'] < $_POST['money']) {
                $error[] = 'Je hebt niet genoeg op de bank staan!';
            }
        } else {
            $result = $connection->query('SELECT cash FROM building_bank WHERE user_id = "' . $_SESSION['user_name'] . '"');
            $row = $result->fetch_assoc();
        
            if ($row['cash'] < $_POST['money']) {
                $error[] = 'Het bedrag wat je hebt aangegeven heb je niet in cash.';
            }
            if ($_POST['deposit'] > $userBankData['max_capicity']) {
                $error[] = 'Je hebt niet voldoende opslag om zoveel geld te storten.';
            }
        }
      
    }
    
    
    
    if (count($error) > 0) {
        foreach ($error as $item) {
            $form_error .= '- ' . $item . '<br />';
            $form_error_modal_bank = "".$form_error."";
        }
    } else {
        // We got a kom, now check if he won something...
        $money = (int) $_POST['money'];
        $WithOrDep = (isset($_POST['withdraw']) ? 1 : 2);
        
        // User wants to withdraw money
        if (isset($_POST['withdraw']) OR isset($_POST['deposit'])) {
        if ($WithOrDep == 1) {
            $connection->query('UPDATE building_bank SET cash = (cash + ' . $money . '), bank = (bank - ' . $money . ') WHERE user_id = "' . $_SESSION['user_name'] . '"');
            $result_text_modal_bank = "Je hebt ".$money." opgenomen";
        } else {
            $connection->query('UPDATE building_bank SET cash = (cash - ' . $money . '), bank = (bank + ' . $money . ') WHERE user_id = "' . $_SESSION['user_name'] . '"');
            $result_text_modal_bank = "Je hebt ".$money." gestort";
        }
        }
        
        
    }
 
PHP hulp

PHP hulp

25/04/2024 08:53:51
 
Marlies Maalderink

Marlies Maalderink

22/04/2017 13:49:58
Quote Anchor link
Het werkt niet omdat je niet controleert hoeveel er al op de bank staat.
Nu is je som:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if ($_POST['deposit'] > $userBankData['max_capicity']) {
?>

(dus: als het bedrag wat gestort wordt groter is dan de max capacity)

maar het moet zoiets zijn:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if ( ( $row['bank'] + $_POST['deposit'] ) > $userBankData['max_capicity'] )
?>


(dus: als het bedrag dat gestort wordt PLUS het bedrag dat al op de bank staat groter is dan de max capacity)
 
Thomas van den Heuvel

Thomas van den Heuvel

22/04/2017 16:15:18
Quote Anchor link
Ik zie ook nergens een controle op invoer? Controleer je ergens of de waarden numeriek zijn? Kun je dit uitbuiten door een negatief bedrag op te nemen?

Ook stop je deze operatie(s) niet in één ondeelbare actie. Alle queries zou je in een transactie moeten zetten, met een initiële SELECT-query die de relevante records locked middels een FOR UPDATE toevoeging.

Plus je maakt in je code continu een spagaat tussen opnemen en storten. Als je deze acties nu eens scheidt?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.