1

私は余暇に PHP を学んでおり、これは練習のために行っている「Hello, World」タイプのスクリプトの 1 つです。

これは以下のコードであり、デフォルトの文字列は変更されないため、コードは永遠にループしてしまいます。理由はわかりません。

<?php
if (isset($_POST["pbankroll"], $_POST["pstartbet"]))
{
    $bankroll = $_POST["pbankroll"];
    $startBet = $_POST["pstartBet"];

    //If using this code below instead of that above, everything will work fine:
    //$bankroll = 200;
    //$startBet = 25;

    while($bankroll >= $startBet)
    {
        $evenOrOdd=mt_rand(0,1);
        if ($evenOrOdd == 1)
        {
            $bankroll += $startBet;
            echo "Win ...... Bankroll is now: " . $bankroll . "<br>";
        }
        else
        {
            $bankroll -= $startBet;
            echo "Loss ..... Bankroll is now: " . $bankroll . "<br>";
        }
    }

    echo "Probability, the Devourer of all Things!";
}
else
{ 
    echo "Please enter a bankroll and starting bet above.";
}
?>

それにフォーム:

<form action="index.php" method="post">
    Bankroll: <input type="text" name="pbankroll">
    Start Bet: <input type="text" name="pstartbet">
    <input type="submit">
</form> 

助けてくれてありがとう。

4

4 に答える 4

4

HTML 名pstartbetをpstartBetに変更する必要があります。

明確にするために編集します。

HTML フォームのStart Bet入力要素には、小文字の「B」が付いたpstartbetという名前があります。PHP がその値をチェックするとき、大文字の Bを持つpstartBetを探します。大文字と小文字が一致するように、これら 2 つの名前のいずれかを変更する必要があります。

そのまま:

$startBet = $_POST["pstartBet"]; // doesn't exist

これは、$startBetになることを意味しますnull。数学演算によって数値にキャストすると、結果は0- になるため、 の値$bankroll決して変化せず、ループは永遠に続きます。

于 2013-03-30T02:33:51.450 に答える
1

まず、数値演算で使用する前に、入力値を整数に変換する必要があります。

$bankroll = intval($_POST["pbankroll"]);
$startBet = intval($_POST["pstartBet"]);

または、浮動小数点値の場合は次を使用します。

$bankroll = floatval($_POST["pbankroll"]);
$startBet = floatval($_POST["pstartBet"]);

これに加えて、コードはもちろん永久に実行できます。これは、疑似乱数が使用されているためです。長い間に 1 が生成されてから 0 が生成されたmat_rand()場合、コードは永久に実行されます。

于 2013-03-30T02:19:41.723 に答える
1

真の乱数はコンピューターでは生成できないと考えてください。どうやらmt_rand、無限ループを引き起こすような方法で疑似乱数を生成します。

于 2013-03-30T02:20:02.637 に答える
0

if変数を句の外に設定し、''基本的に「空」を意味するデフォルトを設定し、これら2つの変数が空かどうかをifチェックすることをお勧めします。

<?php

$bankroll = array_key_exists("pbankroll", $_POST) ? intval($_POST["pbankroll"]) : '';
$startBet = array_key_exists("pstartbet", $_POST) ? intval($_POST["pstartbet"]) : '';

if (!empty($bankroll) && !empty($startBet))
{

    //If using this code below instead of that above, everything will work fine:
    //$bankroll = 200;
    //$startBet = 25;

    while($bankroll >= $startBet)
    {
        $evenOrOdd=mt_rand(0,1);
        if ($evenOrOdd == 1)
        {
            $bankroll += $startBet;
            echo "Win ...... Bankroll is now: " . $bankroll . "<br>";
        }
        else
        {
            $bankroll -= $startBet;
            echo "Loss ..... Bankroll is now: " . $bankroll . "<br>";
        }
    }

    echo "Probability, the Devourer of all Things!";
}
else
{ 
    echo "Please enter a bankroll and starting bet above.";
}
?>
于 2013-03-30T02:23:04.547 に答える