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 的内置服务器会为每个静态文件(引导程序、jquery 等)回复“PHP 通知:未定义索引:用户名...”,更糟糕的是 - 静态文件不加载!

我究竟做错了什么?

4

3 回答 3

2

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

}

这将解决你的问题。当您未提供username该密钥时$_GET,如果您的php.ini文件必须是错误通知,ALL则将显示/呈现通知。

于 2013-03-03T18:20:59.627 回答
1

该通知是在您尝试访问数组中不存在的元素时引起的。在您的情况下, $_GET 超全局实际上没有“用户名”元素(意思是,您没有通过 url 传递用户名)。

在实际检查元素内容之前,您可以更改代码以测试元素是否存在:

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

这是有效的,因为 PHP 使用快捷布尔评估 - 这意味着如果左半部分结果是,则不会评估该表达式的右侧false

于 2013-03-03T18:21:35.943 回答
0

看到这条线

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

每当您有空/没有值时,$_GET['username']您都会收到此错误..您需要调整代码以便也处理这种情况,例如

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

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

normal cose
}
于 2013-03-03T18:23:05.113 回答