0

私は Sell.php と Sell_form.php ファイルを持っています。それらは販売に問題なく機能していますが、ユーザーが銘柄記号に空の値を選択した場合にエラー メッセージを表示したいと考えています。実装しました

'if(["blank"]){
        apologize("You must select a stock symbol");
    }'

この if ステートメントでエラー メッセージが表示されますが、選択した株式を売却することもできません。どこが間違っているのかわかりません。私もこのif文を使ってみました

'if([empty($_POST["symbol"])){
        apologize("You must select a stock symbol");
    }'

これにより、エラーなしでホームページにリダイレクトされます。どんな助けでも大歓迎です。これが私の2つのファイルのコードです。Sell.php

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

if ($_SERVER["REQUEST_METHOD"] == "POST") 
{

    if(empty($_POST["symbol"])){

        apologize("You must select a stock symbol");

    }  

    // lookup stock
    $stock = lookup($_POST["symbol"]);

    // lookup user's shares of stock being sold
    $shares = query("SELECT shares FROM shares WHERE id = ? AND symbol = ?",  $_SESSION["id"], $_POST["symbol"]);

    // calculate total sale value (stock's price * shares)
    $value = $stock["price"] * $shares[0]["shares"];

    $date = date("Y-m-d, H:i:s");

    // add the sale value to cash
    query("UPDATE users SET cash = cash + ? WHERE id = ?", $value, $_SESSION["id"]);

    // delete the stock from their portfolio 
    query("DELETE FROM shares WHERE id = ? AND symbol = ?", $_SESSION["id"], $_POST["symbol"]);  

    query("INSERT INTO history (id, symbol, soldOrBought, numberOfSharesBoughtOrSold, price, dateAndTime)
          VALUES (?, ?, 'Sold', ?, ?, ?)", $_SESSION["id"], strtoupper($_POST["symbol"]), $shares[0]["shares"], $stock["price"], $date );



redirect("/");
}
else
{

$rows = query("SELECT * FROM shares WHERE id = ?", $_SESSION["id"]);

    //create array to store the shares
    $shares = [];

    //for each of the user info

    foreach($rows as $row){

        //lookup stock info
        $stock = lookup($row["symbol"]);
        if($stock !== false){

            $shares[] = [
                "name" => $stock["name"],
                "price" => $stock["price"],
                "shares" => $row["shares"],
                "symbol" => $row["symbol"],
                "total" => $row["shares"]*$stock["price"]
            ];

        }
    }

// render portfolio
render("sell_form.php", ["shares" => $shares, "title" => "Sell"] );
}

?>

Sell_form.php

<ul class="nav nav-pills" >

<li >
    <a href="index.php">Portfolio</a>
</li>
<li>
    <a href="quote.php">Quote</a>
</li>
<li>
    <a href="buy.php">Buy</a>
</li>
<li>
    <a href="sell.php">Sell</a>
</li>
<li>
    <a href="history.php">History</a>
</li>
<li>
    <a href="deposit.php">Deposit Funds</a>
</li>    

</ul>
<form action="sell.php" method="post">
<fieldset>     
    <div class="control-group">

        <select name="symbol">
        <option value="blank"></option>

        <?php foreach ($shares as $symbol):?>
        <option value="<?= $symbol["symbol"]?>"><?= $symbol["symbol"]?></option>
         <? endforeach ?>
        </select>     

    </div>
    <div class="control-group">
        <button type="submit" class="btn">Sell all shares</button>
    </div>
</fieldset>
</form>
<div>
or <a href="logout.php">log out</a>
</div>
4

2 に答える 2

1

選択リストには、値が「空白」の「空白」オプションを含めることができるため、フォームの通常の投稿では空のチェックは機能しません。

チェックは次のようになります。

if(empty($_POST["symbol"]) || $_POST["symbol"]=="blank") {

    apologize("You must select a stock symbol");

} 

これで、値が完全に欠落している場合、または値が「空白」の場合にこのメッセージが表示されます。別のオプションは、選択リストを変更して、次のような最初のオプションを使用することです。

<select name="symbol">
<option value=""></option>

次に必要なのは、if (empty($_POST["symbol"])) { }

于 2013-03-18T15:28:50.777 に答える
0

私の理解によると、関数apologize()は入力テキストを出力しているので、その関数を呼び出した後に実行を終了する必要があります。エラーメッセージが表示されるようにします。次のようにしてみてください、

if(empty($_POST["symbol"])){
apologize("You must select a stock symbol");
die();
} 

編集:より深く理解するために、aplogize()の定義も投稿してください。

于 2013-03-18T15:29:39.780 に答える