1

我在业余时间一直在学习 PHP,这是我为练习而做的“Hello, World”类型脚本之一。

这是下面的代码,默认字符串不会改变,所以代码最终会循环到永恒,因为我不知道为什么:

<?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输入元素的名称为pstartbet,带有小写的“B”。当 PHP 检查该值时,它正在寻找B 大写的pstartBet。这两个名称之一需要更改,以便大小写匹配。

因为它是:

$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子句之外设置变量并设置默认值,''其基本上意味着“空”,然后让 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 回答