我有一个使用以下代码的项目:
第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)
也不会返回任何结果。
答案 0 :(得分:1)
您的本地主机可能已关闭所有error_reporting
,因为您的生产服务器没有。因此,您收到此错误消息是正常行为,因为首次访问该页面时$_POST['search1']
不存在。
你可以检查它以克服这种情况:
<?php
if (isset($_POST['search1'])) {
echo $_POST['search1'];
}
?>
另外,我会关闭您生产网站上的所有error_reporting,因为向访问者显示错误不是很专业。
答案 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>