2012-03-27 15 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(); 
?> 

が含ま持っていますすべてのページ要素を取得することですDBから取り出してページに投げる。ザ・が含ま

は、私はあなたが認証されたユーザーならCMS情報バーとボタンを表示するものであると仮定し

<? 
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> 
    '; 
} 
?> 

(フッター)だけでなく、後のページで表示されます。問題は、私は認証することができず、私は警告が消えないことです。ここでは認証機能が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"); ?>を追加することが、試してみました。これらのエラーの原因となるローカル開発環境では何が欠けていますか?

答えて

3

ボタンの変数を定義すると範囲外になるため、通知が表示されます。これに

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

:だから、ちょうどからあなたのコードを変更する場合のよう

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

これは速記コードがある、あなたは、ブラケットを追加することができます。

+0

ここにペーストビンがあります... http://pastebin.com/ir3uAXK2 – Ofeargall

+0

mod関連部分を残してお詫び申し上げます。 – Ofeargall

+0

素晴らしいですが、私の答えが更新されました(これは簡単な修正です)。 –

1

私は、dev環境に警告レベルがオンになっていると思われます。これが原因です。

変数 'buttons'を空文字列として定義してください。変数を使用する前に、変数を初期化するだけで済みます。

$buttons = ''; 

がcodebinを見た後に追加:

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

$item["buttons"] = $buttons; 

を変更

試して、それがすでに設定されていた場合、それだけで$ボタンを呼び出し、そのように、あなたが設定する必要があります$item['buttons']を空の文字列に変換するか、後で使用すると同様のエラーが発生する

+0

しかし、変数はあなたがログインしているユーザーでなければ利用できません。これは、私のローカル環境でいかなる種類のログインもせずにページを読み込むと起こります。 – Ofeargall

+0

回答を編集してください –

関連する問題