应该返回true时PHP isset()返回false?

时间:2011-12-20 00:13:27

标签: php isset

好吧......所以在我的表格中,我将所有字段设置为这样的字体:

name="formdata['name']"name="formdata['active']"

当然,这意味着在这些字段中输入的内容应存储在$_POST['formdata']['name']$_POST['formdata']['active']中。

我以这种方式做我的价值因为我将'formdata'传递给我写的几个函数(它们可以正常工作。)现在让我说我用它来编辑一个项目或添加一个新项目 - - 名称将按原样执行这些功能,项目将以其名称保存,但“活动”将永远不会保存。输入字段是一个复选框 - 如果选中它,则值为“1”。

如果我在输入“姓名”并选中“有效”后print_r($_POST['formdata']),我会收到:Array ( ['name'] => Name ['active'] => 1 )

看起来很好,对吧?但是当我做以下事情时:

if (!isset($_POST['formdata']['active']) echo "Error 1";
if (empty($_POST['formdata']['active']) echo "Error 2";
if ($_POST['formdata']['active'] != 1) echo "Error 3";

他们都返回错误!我为此感到困惑。我忽略了一些非常简单的事情吗我现在已经考虑过这个问题至少2个小时了。

2 个答案:

答案 0 :(得分:4)

从HTML中删除输入名称中的单引号,使其显示为:

name="formdata[active]"

添加单引号意味着您必须在PHP中访问数组:

$_POST['formdata']['\'active\'']

$_POST['formdata']["'active'"]

非常不方便。

答案 1 :(得分:0)

缺少括号:

if (!isset($_POST['formdata']['active'])) echo "Error 1";
if (empty($_POST['formdata']['active'])) echo "Error 2";