函数没有在PHP中定义变量

时间:2012-03-27 20:38:52

标签: php function variables

我从之前的(不再可用的帮助)开发人员继承了一个网站,我开始时并不是一个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数据并删除管理工具但是,这也无效。我在本地开发环境中缺少什么会导致这些错误?

2 个答案:

答案 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']设置为空字符串,否则在以后使用时会抛出类似的错误