0

我已经使用这个二十一点游戏中的一些代码来构建我自己的完整版本。

一切都使用 Xampp 在本地完美运行,但是当我上传完整版本时,我得到:期望参数是数组,给定布尔值。

我对 PHP 很陌生,但据我了解,我已经定义了数组。为什么它给我一个在线布尔值和离线数组?

这是我写的完整游戏 。(网站有点 NSFWish,但页面很干净)

问题似乎来自这里:

function evaluateHand($hand) {
$Ace=0;
global $faces;
$value = 0;
foreach ($hand as $card) {
    if ($card['face'] == 'Ace') 
        $Ace++;

 $value = intval($value) + intval($faces[$card['face']]);

   while ($Ace>0 && $value >21)
        {
            $value = intval($value) - 10;
            $Ace--;
        }

}

特别是 -foreach ($hand as $card) { 部分。

我确实记得读过其他人遇到同样的问题,并且解决方案似乎在这里从双引号切换到单引号。

<input type='hidden' name='handstr' value = '<?php echo $handstr ?>' />

但我已经有了单引号。

真正让我感到困惑的是,编写脚本的人似乎运行良好。

如果您将 .PHP 更改为 .txt,您可以看到完整的游戏代码(来自上面的链接……抱歉,最多 2 个链接)

任何人都知道为什么离线与在线不同,以及如何解决这个问题?

4

1 回答 1

0

您需要注意, 的输出serialize()不适合直接包含在 HTML 表单字段中;它可能包含 HTML 中不允许的字符,例如空字节、单引号和双引号等。

我建议您将输出包装serialize()在 Base64 中,例如:

<input type='hidden' name='dealerstr' value = '<?php echo base64_encode($dealerstr) ?>' />

当然,您也需要base64_decode()在反序列化之前 POST 数据。

于 2013-02-13T12:40:38.013 回答