0

可能重复:
变量总是重置

所以我对 html 或 php 不太熟悉,但是我一直在开发像 mastermind 这样的游戏,我的代码一直存在的一个问题是变量 $attempts 似乎总是重置,所以它的价值总是1。有没有办法解决这个问题?我的大部分代码都在这里:

<?php
$showtable = false;
$showform = false;
$showstart= true;
$process = false;
$black = 0;
$white = 0;
$answer = array(1,2,3,4);
$tries = array();
$attempts = 0;

if (isset($_POST['started']))
{
    $showform = true;
    $showstart = false;
}

if (isset($_POST['guessed']))
{
    $process = true;
}

if ($showstart == true)
{
    echo"
    <form action='' method='post'>
    <input type='submit' value='Start' name='start' />
    <input type='hidden' value='started' name='started'/>
    </form><Br /><br />
    ";
}

if ($showform == true)
{
    echo"
    <h3>Your guess:</h3>
    <form action='gogo.php' method='post'>
    <input type='text' placeholder='Your guess' maxlength='4' value='' name='guess' />
    <input type='submit' value='guess' name='submitt' />
    <input type='hidden' value='started' name='started' />
    <input type='hidden' value='guessed' name='guessed' />
    </form><Br /><br />
    ";
}

if ($process == true)
{
    $attempts += 1;
    $guess = str_split($_POST['guess']);
    if ($guess == $answer)
    {
        $black = 4;
    } else
    {
        for ($i=0;$i<4;$i++)
        {
            if ($guess[$i] == $answer[$i])
            {
                $black += 1;
                $white -= 1;
            }
        }
        $result = array();
        foreach ($guess as $val)
        {
            if (($key = array_search($val, $answer))!==false)
            {
                $result[] = $val;
                unset($answer[$key]);
            }
        }
        $count = count($result);
        $white = $white + $count;
    }
}
$chance = implode(" ",$guess);
$try = $attempts.".".$chance.".".$white.".".$black;
array_push($tries, $try);
$showtable = true;

if ($showtable == true)
{
    echo"
    <table border='2' cellpadding='10'>
    <Tr><Td>Attempt:</td><td>Number guessed:</td><td>White:</td><Td>Black:</td></tr>
    ";
    for ($i=0;$i<$attempts;$i++)
    {
        $split = explode(".",$tries[$i]);
        echo"
        <tr><td>".$split[0]."</td><td>".$split[1]."</td><td>".$split[2]."</td>    <td>".$split[3]."</td></tr>
        ";
    }
    echo"
    </table>
    ";
}
?>
4

2 回答 2

2

在代码开始时,您将变量初始化为零,因此每次运行代码(即每次进行移动)时,变量都会“重置”。

您应该以某种方式保存变量,无论是使用数据库还是使用$_SESSION变量。但请注意,您必须添加检查以确保发送的$_POST内容与您在游戏中此时的预期一致。

于 2012-10-01T17:29:41.200 回答
0

这是因为每次您点击页面时,您都会在开始时设置$attempts0,并且您只会将其增加 1。因为您没有提交(然后使用)$attempts表单中的值(隐藏字段或否则),您没有任何方法可以在请求之间保留该值。请记住,每次访问页面时,脚本都会从头开始。除非您将内容存储在会话或数据库中,或者使用表单或查询字符串参数来保存数据的状态,否则每次都希望重新开始。

于 2012-10-01T17:30:22.573 回答