为了从头开始学习无框架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的内置服务器为每个静态文件(bootstrap,jquery等)回复“PHP通知:未定义索引:用户名...”,更糟糕的是 - 静态文件做不加载!
我做错了什么?
答案 0 :(得分:2)
使用
更改ifif(isset($_GET['username']) && $_GET['username'] == "admin") {
...
}
这将解决您的问题。如果您未在username
中设置$_GET
该密钥,并且php.ini
文件必须为ALL
,则会显示错误通知,即会显示/呈现通知。
答案 1 :(得分:1)
当您尝试访问数组中不存在的元素时,会引发通知。在你的情况下,$ _GET超全局实际上没有'username'元素(意思是,你没有通过url传递用户名)。
在实际检查其内容之前,您可以更改代码以测试元素是否存在:
if(array_key_exists('username',$_GET) && $_GET['username'] == "admin") {
...
}
这是有效的,因为PHP使用快捷方式布尔评估 - 意味着如果左半部分变为false
,则不会评估该表达式的右侧。
答案 2 :(得分:0)
看到这一行
if($_GET['username'] == "admin")
每当你有$_GET['username']
的空/无值时,你都会收到此错误..你需要调整你的代码,以便你也能处理这种情况,比如
if(!isset($_GET['username'])){
your code....to handle this index error
}else{
normal cose
}