我在业余时间学习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>
我很感激帮助。
答案 0 :(得分:4)
HTML名称 pstartbet 需要更改为 pstartBet 。
编辑以澄清:
HTML表单中的开始下注输入元素的名称为 pstartbet ,其中“B”为小写。当PHP检查该值时,它正在寻找带有B大写的 pstartBet 。需要更改这两个名称中的一个,以便案例匹配。
原样:
$startBet = $_POST["pstartBet"]; // doesn't exist
这意味着$startBet
将是null
。当通过数学运算转换为数字时,这将导致0
- 因此$bankroll
的值永远不会更改,并且循环将永远继续。
答案 1 :(得分:1)
首先,在数值运算中使用它们之前,你必须将输入值转换为整数:
$bankroll = intval($_POST["pbankroll"]);
$startBet = intval($_POST["pstartBet"]);
或者,如果它们是浮点值,请使用:
$bankroll = floatval($_POST["pbankroll"]);
$startBet = floatval($_POST["pstartBet"]);
除此之外,代码当然可以永远运行。这是因为正在使用的伪randum数字。如果在很长一段时间内,mat_rand()
生成了更多的1然后0,则代码将永远运行
答案 2 :(得分:1)
考虑到计算机无法生成真正的随机数。显然mt_rand
生成一个伪随机数,导致它无限循环。
答案 3 :(得分:0)
我建议将变量设置在if
子句和&amp;之外。设置默认值''
,这基本上意味着'空'&amp;然后检查这两个变量是否为空。
<?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.";
}
?>