PHP中的“通知:未定义的索引”不正确

时间:2013-12-30 19:27:28

标签: php

我有一个使用以下代码的项目:

第1页:

<form action="customersPrint.php" method="post" target="_blank">
   Customer's name: <input type="text" name="search1" /><br />
   <input type="submit" value="Search" />
</form>

第2页(customersPrint.php)

<?php
echo $_POST['search1'];
?>  

奇怪的问题是第2页中的代码在本地计算机和生产服务器上正常工作。但它在另一个远程服务器中返回以下消息:

  

注意:未定义的索引:search1 in ...

这种行为是错误的。因为我已经发布了这个参数,并且它之前没有返回任何类似的消息 有什么问题 ?

更多信息:
使用下面的代码,我告知第2页说没有发送任何内容:

if (isset($_POST['search1'])) echo 'Sent'; else echo 'Not sent';

结果未发送

var_dump($_POST)也不会返回任何结果。

3 个答案:

答案 0 :(得分:1)

您的本地主机可能已关闭所有error_reporting,因为您的生产服务器没有。因此,您收到此错误消息是正常行为,因为首次访问该页面时$_POST['search1']不存在。

你可以检查它以克服这种情况:

<?php
    if (isset($_POST['search1'])) {
        echo $_POST['search1'];
    } 
?> 

另外,我会关闭您生产网站上的所有error_reporting,因为向访问者显示错误不是很专业。

http://www.php.net/manual/en/function.error-reporting.php

答案 1 :(得分:0)

如果您尝试直接访问customersPrint.php而未提交表单,则$_POST变量为空。您收到的消息不是致命错误,而只是通知您正在尝试输出不存在的内容。

要解决此问题,请检查变量是否在回显之前设置。例如:

echo (isset($_POST['search1'])) ? $_POST['search1'] : ''; 

答案 2 :(得分:0)

可能存在涉及Mod Security的解决方案。查看此链接:http://www.s2member.com/kb/mod-security-random-503-403-errors/

尝试将此添加到根.htaccess文件(取自上面的链接):

# Mod Security v1.x.
# May work in .htaccess too, on some hosts.
<IfModule mod_security.c>
    SecFilterEngine Off
    SecFilterScanPOST Off
</IfModule>

# Mod Security v2.x.
# Will NOT work in .htaccess, use httpd.conf.
<IfModule mod_security2.c>
    SecRuleEngine Off
</IfModule>

或者,如果您有权编辑httpd.conf文件(取自上面的链接):

# Mod Security v2.x only.
# Will NOT work in .htaccess, use httpd.conf.
<IfModule mod_security2.c>
    SecRuleRemoveById 960024 981173 981212 960032 960034
</IfModule>