Het programma voert een transactie altijd uit ook al is er niet voldoende geld.

Status
Niet open voor verdere reacties.

sjaarlep

Gebruiker
Lid geworden
25 okt 2010
Berichten
77
Hallo,
Ik moet voor edX een opdracht maken in PHP genaamd cs50 finance.
Ik heb bijna alles gemaakt maar nu zit ik volledig vast, ik weet wat het probleem is maar ik heb geen flauw idee hoe je het moet oplossen...
De code hieronder is bedoeld op zogezegd aandelen aan te kopen.
Maar deze kunnen enkel aangekocht worden als er genoeg geld is en daar zit het probleem, ik kan ze altijd aan kopen ook al zit ik zonder geld...
Ik heb in het vet aangeduid waar het probleem zit. Zou iemand mij hiermee kunnen helpen?
Alvast bedankt!

buy.php :
PHP:
<?php

    // configuration
    require("../includes/config.php");

    // if form was submitted
    if ($_SERVER["REQUEST_METHOD"] == "POST")
    {   
        if ((empty($_POST["symbol"])) || (empty($_POST["shares"])))
        {
        	apologize("You must enter a symbol and an amount of shares");
        }	
        
        if (lookup($_POST["symbol"]) === false)
        {
        	apologize("You must enter a valid symbol");
        }
        
        if (preg_match("/^\d+$/", $_POST["shares"]) == false)
        {
        	apologize("You must enter a positive integer");
        }
        
        $shares = $_POST["shares"];
        
        $transaction = 'BUY';
        
        $stock = lookup($_POST["symbol"]);
        
        $cash = query("SELECT cash FROM users WHERE id = ?", $_SESSION['id']);
        
        $total = $stock["price"] * $_POST["shares"];
        
        $today = date("m-d-Y H:i:s");

        [I][B]if ($cash < $total)[/B][/I]       
{
			apologize("You can't afford that.");
        }
        else
        {
            $_POST["symbol"] = strtoupper($_POST["symbol"]);
            
            query("UPDATE users SET cash = cash - ? WHERE id = ?", $total, $_SESSION["id"]); 
        	
            query("INSERT INTO portfolio (id, symbol, shares) VALUES(?,?, ?) ON DUPLICATE KEY UPDATE shares = shares + VALUES(shares)", $_SESSION["id"],$stock["symbol"],$_POST["shares"]);
           
        	query("INSERT INTO history (id, transaction, date, symbol, shares, price) VALUES(?,?,?,?,?,?)", $_SESSION["id"], $transaction, $today, $_POST["symbol"], $_POST["shares"],$stock["price"]);
       
       		redirect("./");
       	}   
    }
    else
    {        
        // else render form
        render("buy_form.php", ["title" => "Buy Form"]);
    }

?>

buy_form.php:
PHP:
<form action="buy.php" method="post">
    <fieldset>
        <div class="control-group">
            <input autofocus name="symbol" placeholder="Symbol" type="text"/>
        </div>
        <div class="control-group">
            <input name="shares" placeholder="Shares" type="text"/>
        </div>
        <div class="control-group">
            <button type="submit" class="btn">Buy</button>
        </div>
    </fieldset>
</form>
 
Laatst bewerkt:
Heb je al eens de waardes van $cash en $total op het scherm laten printen? Blijkbaar klopt een (of beide) van die waardes niet.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan