2013-03-03 35 views
0

从头开始学习无框架PHP的缘故,我写了有以下代码admin.php的文件:硬编码的凭据防止静态文件加载

<?php 

$not_auth_msg = "<h1>Not Authorized</h1>"; 
if($_GET['username'] == "admin") { 
    $pass = md5($_GET['password']); 
    if($pass != "21232f297a57a5a743894a0e4a801fc3") { 
     exit($not_auth_msg); 
    } 
} else { 
    exit($not_auth_msg); 
} 

?> 

<!doctype html> 
<html> 
<head> 
    <!-- link to bootstrap --> 
    <!-- jquery script --> 
    <!-- etc --> 
</head> 
.. 
.. 
.. 
</html> 

授权工程确定,但PHP 5.4的内置服务器回复“PHP通知:未定义的索引:用户名...”,每个静态文件(bootstrap,jquery等),更糟糕的是 - 静态文件无法加载!

我在做什么错?

+0

您应该使用isset()来检查是否设置了$ _GET ['username']。 – jhine 2013-03-03 18:21:40

回答

2

更改如果与

if(isset($_GET['username']) && $_GET['username'] == "admin") { 
... 

} 

,将解决你的问题。如果您没有提供username该密钥未在$_GET中设置,并且错误通知如果您的php.ini文件必须是ALL,即通知将被显示/呈现。

+0

所以,现在我没有得到一个例外,但静态文件没有像以前一样加载@ user2129388 – user2057574 2013-03-03 18:30:08

+1

这是因为你在else块中使用'exit()',它不会在那行代码之外渲染任何内容。将'PHP'代码放在''之后,以解决问题。 – user2129388 2013-03-03 18:37:41

+0

我发现这个问题,它与php的代码位置无关,我只是在我的路径中有一个额外的“/”字符(请参阅php扩展之后):admin.php /?username = admin&password = admin至于例外,我使用你的答案,它的工作原理,谢谢。 @ user2129388 – user2057574 2013-03-03 18:45:26

1

当您尝试访问数组中的不存在的元素时,会引起通知。在你的情况下,$ _GET superglobal实际上并没有“用户名”元素(这意味着,你没有通过url传递用户名)。

你可以改变你的代码来测试元素是否存在等,然后实际检查的内容:

if(array_key_exists('username',$_GET) && $_GET['username'] == "admin") { 
    ... 
} 

这工作,因为PHP使用快捷布尔评价 - 这意味着表达的右侧是不会如果左半部分结果为false,则进行评估。

+0

所以,现在我没有得到一个异常,但静态文件没有像以前那样加载@Hazzit – user2057574 2013-03-03 18:28:26

0

看到这一行

if($_GET['username'] == "admin") 

,只要你有空/对$_GET['username']没有价值,你会得到这个error..you需要,让你处理那种情况下,调整你的代码,类似

if(!isset($_GET['username'])){ 

your code....to handle this index error 
}else{ 

normal cose 
}