2009-12-06 84 views
2

我想知道你是否可以帮助我以下几点:

我将一些填入表单的信息传递到下一页来显示。我正在使用$_POST方法。虽然检查代码时显示在浏览器中的信息显示为注意:未定义索引错误,并且没有传递值的痕迹(代码中应该是)。我认为这与上面的错误有关。

我呼吁它的方式是对前:

$name = $_POST['name']; 

此外,我想获得一些隐藏字段相同的信息,以便它们存储在数据库中,但在这里(在浏览网页后)也没有价值传递。隐藏的值是空的。

对不起,如果这似乎是一件愚蠢的事情......但赌注,不知道我做错了什么。 真的很感谢任何帮助。非常感谢弗朗西斯

回答

6

在PHP中,您不能读取不存在的变量。对于非现有的普通变量,如$foo$bar你会得到一个未定义变量通知,对不存在的数组索引像$array['foo']$array['bar']你会得到一个未定义指数通知,像$object->foo$object->bar不存在的对象属性你会得到一个未定义的财产的通知。

这是因为在PHP中,变量必须在读访问完成之前声明。 PHP的函数isset用于测试变量是否存在,array_key_exists用于数组索引,property_exists用于对象属性。此外isset是一种通用工具来测试存在。 (请注意,价值等同于不存在。)

所以你的情况,你应该测试是否试图读取它之前存在$_POST['name']

if (array_key_exists($_POST, 'name')) { 
    $name = $_POST['name']; 
} 
// or 
if (isset($_POST['name']) { 
    $name = $_POST['name']; 
} 

但是注意,$name存在现在取决于$_POST['name']的存在。

+0

谢谢Gumbo的反馈,尽管我仍然不确定自己做错了什么。我使用isset发出警告。这是否意味着错误地发布了这些值? – frapet 2009-12-06 17:15:03

+0

@francesco:每当你想要读取你不确定的变量时,你需要用'isset'来测试。看一看我已经发布的例子,其中'$ _POST ['name']'的存在在我读取它的值之前进行了测试。但现在'$ name'依赖于'$ _POST ['name']',并且您需要测试该变量是否存在。或者你声明'$ name'为默认值(例如* null *或'“”'),并且只有在存在'$ _POST ['name']'时才覆盖它。 – Gumbo 2009-12-06 17:36:57

+0

谢谢你。 – frapet 2009-12-06 20:33:42

1

为了调试,你可以尝试:

的print_r($ _ POST);

它会显示一个post数组中的所有变量。 看看你的变量是否在那里,如果没有 - 你的表单有什么问题。

Leonti

+0

谢谢Leonti。变量在那里。如上所述,值实际上显示在页面中,因此它们被传递。 – frapet 2009-12-06 16:09:37

+0

然后,他们正在某处被取消设置,或者您在页面上看到的值不是来自$ _POST var。 – 2009-12-06 16:14:20