2012-03-27 86 views
2

我从以前的(不再提供帮助的)开发者那里继承了一个站点,我并没有太多的PHP编码器,所以请耐心等待。函数没有在PHP中定义变量

我不断收到错误,有些变量是不确定的和CMS管理工具栏一直显示在页面的顶部,即使我没有登录了。

重要事项这只是发生在我当地发展环境。

错误:

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的数据,并删除了管理工具,但是,这也不能工作。我在本地开发环境中缺少什么会导致这些错误?

回答

3

它给你一个通知,因为当你定义按钮变量时,它超出了范围。所以,单纯从改变你的代码:

if($this->admin) 
{ 
    $buttons = $this->editButtons; 
} 
else 
{ 
    $butons = ""; 
} 

这样:

$buttons = ''; 
if($this->admin) 
    $buttons = $this->editButtons; 

这是速记的代码,你可以,如果你喜欢加括号。

+0

这里是粘贴bin ... http://pastebin.com/ir3uAXK2 – Ofeargall 2012-03-27 21:23:13

+0

我的道歉离开国防部相关部分了。 – Ofeargall 2012-03-27 21:25:24

+0

真棒,更新了我的答案(这是一个相当简单的修复)。 – 2012-03-27 21:27:16

1

我怀疑开发环境已打开警告级别,这就是为什么你得到这个。

转到有问题的文件,并在第275行将变量'buttons'定义为空字符串。你只需要在变量被使用之前初始化变量。

$buttons = ''; 

观看codebin后增加:

尝试改变

$item["buttons"] = $buttons; 

if (isset($buttons)) { 
    $item["buttons"] = $buttons; 
} 
else { 
    $item['buttons'] = ''; 
} 

这样,它仅调用$按钮,如果它被设置已经,您需要设置$item['buttons']为空字符串,否则在稍后使用时会抛出类似的错误,否则会返回

+0

但是,只有您是登录用户才能使用该变量。当我在本地环境中没有任何类型的登录时加载页面时会发生这种情况。 – Ofeargall 2012-03-27 21:26:56

+0

请参阅编辑答案 – 2012-03-27 21:31:41