2012-03-27 89 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