等于$ _POST的PHP字符串稍后不会更改,或者可能是其他内容

时间:2013-03-30 02:14:42

标签: php string

我在业余时间学习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 个答案:

答案 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.";
}
?>