繁体   English   中英

PHP $ _GET和$ _POST未定义的问题

[英]PHP $_GET and $_POST undefined problem

我是PHP的新手,所以如果这是一个简单的问题,我道歉...

我正在将PHP站点从一个服务器移动到另一个服务器。 新服务器是IIS 7.0,PHP 5.2.1,短开标签打开“On”,我不知道原始服务器是如何设置的(我刚刚给出了代码)。

以下是其中一个页面的第一部分代码:

<?
ob_start();
session_start();

if($_GET['confirm'] == 13 || $_GET['confirm'] == 14 || $_GET['confirm'] == 15 || $_GET['confirm'] == 16) 
{
    include("test/query/test_query.php");
}
?>

执行此页面时,始终显示以下错误:

PHP注意:未定义的索引:在第6行的[文件位置] .php中确认

此外,用户通过从主页(标准HTML页面)重定向来访问此页面。 正确导航到的完整URL如下:

HTTP:// WWW [现场] .COM / test.php的#登录

...我理解为什么会抛出错误。 我不明白的是这个代码如何在原始服务器上工作。 我可以错过配置设置吗?

*同样的问题发生在整个网站的几十个地方。 这只是该问题的一个特定事件。

新服务器将error_reporting设置为E_ALL。 你所看到的是通知,而不是错误。 尝试:

error_reporting(E_ALL ^ E_NOTICE)

将错误报告设置为E_ALL时,访问未设置的数组成员会生成错误。 如果您不希望降低错误报告级别,请在检查$ _GET ['var']之前将代码更改为:

if(isset($_GET['confirm']) && ($_GET['confirm'] == 13 || $_GET['confirm'] == 14 || $_GET['confirm'] == 15 || $_GET['confirm'] == 16)) {

通过在实际访问$_GET['confirm']之前添加对isset()的调用,您将验证您没有访问未设置的数组成员。 $_GET['confirm']只有在URL结束时才会设置?confirm=...?something...&confirm=...

我建议优化阅读代码:

if (isset($_GET['confirm']) && ($_GET['confirm'] >= 13 && $_GET['confirm'] <= 16)) 

我完全赞同乔希的建议。

由于没有索引$ _GET ['confirm'],PHP会抛出一条通知,指出您正在查看未定义的索引。 正在显示通知,因为新服务器在error_reporting中设置了E_NOTICE标志,可以在php.ini中,也可以在某些配置文件或在页面加载上运行的引导程序中设置。

从php手册中, E_NOTICE :“运行时通知。指示脚本遇到可能表示错误的内容,但也可能在正常运行脚本的过程中发生。”

如果您不担心,可以尝试关闭通知,或者使用它们追踪可能存在问题的地方。

对于您发布的代码,一个简单的解决方法是将条件更改为

if(isset($_GET['confirm']) && <list of OR conditions>)

这样,如果没有'确认'索引,PHP将无法评估条件。

isset()是一个有用的函数。 如果变量存在则返回“true”,否则返回“false”。 通常,人们将它与$_GET$_POST$_GET全局结合使用来确定您是否从网站上的其他页面发送 - 这允许您根据用户来自何处以及数据是什么来创建不同的操作标记。 它还可以防止尝试使用尚未定义的变量时出现错误,例如OP正在获取。 因此,无需编写两个不同的.php文件,并担心将用户发送到错误的文件,您可以在一个页面中完成所有操作。

周杰伦,我会小心你对其中一些电话的使用。 <?php<?更有可能工作<? 我听说session_start()应该是设置到浏览器的第一件事,否则会导致头问题。 是的,你需要在使用它之前声明一个变量 - 如果你没有输入[file].php?confirm=[some number]作为你的URL,你的页面将会破坏,除非你修改它以允许休息。

那是因为似乎没有设置confirm查询字符串变量,你可以检查它:

ini_set('display_errors', true);
error_reporting(E_ALL);

var_dump($_GET['confirm']);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM