2016-06-28 104 views
0

我在PHP中有一个问题,我正在尝试2个小时来解决这个问题。PHP常量包括

我有一个应用程序,我希望所有用户都从index.php文件开始。该文件包含登录文件和内容文件。

现在,通常用户可以直接访问content.php文件。

因为这个原因,我定义了一个常数,当用户在index.php开始时设置。

这个文件看起来像

define('NAME','X'); 
include("Login.php"); 
include("content.php"); 

现在我定义常量,我想在我的包含文件,以检查是否该常数设置为显示我的数据。在登录文件中,这没有问题。 然后,我有第二个,如果我只是把它写这样它的工作原理:

if(defined('NAME')) 
    { 
     showContent(); 
    } 

但我也有$ _ POST检查并与它不工作!

if(defined('NAME')) 
{ 
if (isset ($_POST ["Login"])) 
{ 
    if ($_POST ["Login"] == "True") {  
     echo showContent(); 
    } 
} 
} 

没有if(定义('NAME'))周围它工作正常!我从JavaScript文件中获取帖子变量。

你能解释一下为什么它只与第二个定义的而不是第二个定义一致?

很显然,常数是正确定义的。

感谢。

+0

你知道,一个常数不会持续在整个页面?更好地使用'$ _SESSION ['hasseenindex']''。 – Jeff

+0

如果您的condintion if(defined('NAME'))返回false,那么您的发布请求可能不会调用index.php脚本。你能告诉我们你的HTML表单吗? – zajonc

+0

Javascript文件将值发送到什么PHP文件? –

回答

0

该常量不像会话值,它不会持续存在多个页面。

当您对页面执行POST请求时,常量不再被定义,因此您的代码不会被执行。

它使用常量作为安全措施来防止未经授权的访问,您可以考虑做与您现在正在做的事情“相反”的事情,而不是检查常量是否已设置,检查它是否不正确,然后做一个403.

if(!defined('NAME')) { 
    die('403'); 
}