0

我有一个数组($form),它从 $_POST 中检索一些信息:

$form = $_POST['game'];

现在我想使用这个数组中的值,但我不知何故失败了。

为了调试,我使用了这些命令(以完全相同的顺序,中间没有多余的行):

print_r($form);
echo '#' . $form['System_ID'] . "#";

作为返回的输出,我得到:

Array
(
    ['Title'] => Empire: Total War - Special Forces
    ['Genre_ID'] => 1
    ['Type'] => Spiel
    ['System_ID'] => 1
)
##

我的 System_ID 去哪儿了有什么想法吗?它在 print_r 中,但不在 echo 的下一行?!?

4

3 回答 3

8

好吧,我自己找到了解决方案(又名 d'oh!)

我添加了另一个

var_dump($form);

进行进一步分析,这就是我得到的:

array(4) {
  ["'Title'"]=>
  string(34) "Empire: Total War - Special Forces"
  ["'Genre_ID'"]=>
  string(1) "1"
  ["'Type'"]=>
  string(5) "Spiel"
  ["'System_ID'"]=>
  string(1) "1"
}

注意到双引号内的单引号了吗?

看起来好像您不允许在 html 表单中使用单引号,否则它们将包含在数组键中:

Wrong: <input type="text" name="game['Title']" />
Correct: <input type="text" name="game[Title]" />
于 2009-04-09T09:28:19.410 回答
3

print_r() 不会在键周围加上引号 - 为了调试,我建议完全放弃 print_r。var_export 或 var_dump 更好。

更好的是:使用firephp。它通过标头发送调试信息,因此它不会弄乱您的输出,因此甚至可以与 ajax 一起使用。使用萤火虫很好地显示输出,包括数据结构的语法着色。

而且它更容易使用:只需fb($myvar);

于 2009-04-09T09:52:01.350 回答
-1

这个对我有用:

<?
  $form['System_ID'] = 1;
  print_r($form);
  echo '#' . $form['System_ID'] . '#';
?>

输出:

% php foo.php
Array
(
    [System_ID] => 1
)
#1#

PHP 5.2.6,在 Fedora Core 10 上

编辑 - 请注意,这里有真正原因的提示。在我的代码中,print_r输出(正确)显示了没有单引号的数组键。原始发布者的键在输出中确实有引号print_r,表明实际键以某种方式包含引号。

于 2009-04-09T09:24:43.507 回答