我从之前的(不再可用的帮助)开发人员继承了一个网站,我开始时并不是一个PHP编码器,请耐心等待。
我一直收到一些错误,即某些变量未定义,CMS Admin工具栏会一直显示在页面顶部,即使我还没有登录。
重要说明这只发生在我的本地开发环境中。
错误:
Notice: Undefined variable: buttons in /Users/shortname/Sites/sitename.com/public_html/admin/editable.class.php on line 275
修改以下是完整的文件:
Pastebin of editable.class.php
在我的页面中,我有一个包含
<?php
include_once 'admin/editable.class.php';
$page = new page(6, 2, 0);
echo $page->get();
?>
它的工作是从数据库中获取所有页面元素并将其扔到页面上。
包含也出现在页面的后面(在页脚中)
<?
include_once "admin/editable.class.php";
$login = new dynamic;
if($login->isAdmin())
{
echo '
<div id="adminBar">
<div>
<h3>Admin Menu</h3> <span class="editable">Editable Pages: <a href="/company/media.php">In The Media</a> | <a href="/company/faq_about.php">FAQ</a> | <a href="/company/tradeshows.php">Tradeshows</a></span> <a class="logout" href="/admin">Logout</a>
</div>
</div>
';
}
?>
如果您是经过身份验证的用户,我假设显示了CMS信息栏和按钮。麻烦的是,我无法进行身份验证,我无法获得警告消失。以下是editable.class.php
中的身份验证功能:
function isAdmin()
{
if (isset($_COOKIE["admin"]) && $_COOKIE["admin"] === sha1("username".$this->salt.$this->users["username"]))
{
$this->admin = true;
return true;
}
else
{
$this->admin = false;
return false;
}
}
function login()
{
if($this->isAdmin())
{
return true;
}
if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($this->users[$_SERVER['PHP_AUTH_USER']]) || $this->users[$_SERVER['PHP_AUTH_USER']] !== $_SERVER['PHP_AUTH_PW'])
{
header('WWW-Authenticate: Basic realm="Administration"');
header('HTTP/1.0 401 Unauthorized');
echo 'Authorization Required';
exit;
}
else
{
setcookie("admin", sha1("username".$this->salt.$this->users["username"]), 0, "/", ".sitename.com");
$this->admin = true;
return true;
}
}
function logout()
{
header('HTTP/1.0 401 Unauthorized');
setcookie("username", "", time() - 1, "/", ".sitename.com");
}
我尝试添加<?php setcookie("username", "", time() - 1, "/", ".sitename.com"); ?>
以查看我是否可以清除Cookie数据并删除管理工具但是,这也无效。我在本地开发环境中缺少什么会导致这些错误?
答案 0 :(得分:3)
它会给你一个通知,因为当你定义buttons变量时,它超出了范围。所以,只需更改代码:
if($this->admin)
{
$buttons = $this->editButtons;
}
else
{
$butons = "";
}
到此:
$buttons = '';
if($this->admin)
$buttons = $this->editButtons;
这是速记代码,如果您愿意,可以添加括号。
答案 1 :(得分:1)
我怀疑开发环境已启用警告级别,这就是你得到这个的原因。
转到相关文件,然后在第275行将变量“buttons”定义为空白字符串。您只需要在使用变量之前对其进行初始化。
$buttons = '';
在查看代码后添加:
尝试更改
$item["buttons"] = $buttons;
到
if (isset($buttons)) {
$item["buttons"] = $buttons;
}
else {
$item['buttons'] = '';
}
这样它只调用$按钮如果已经设置了,你需要将$item['buttons']
设置为空字符串,否则在以后使用时会抛出类似的错误