2012-03-27 10 views
2

Ich habe eine Seite von einem früheren (nicht mehr für Hilfe verfügbaren) Entwickler geerbt und ich bin nicht viel von einem PHP-Programmierer, um damit zu beginnen, ertragen Sie mit mir.Funktion definiert keine Variable in PHP

Ich erhalte eine Fehlermeldung, dass einige Variablen sind nicht definiert und das CMS Admin Toolbar hält am oberen Rand der Seite zeigt nach oben, auch wenn ich nicht angemeldet bin.

Wichtiger Hinweis Dies geschieht nur in meinem lokale Entwicklungsumgebung.

Der Fehler:

Notice: Undefined variable: buttons in /Users/shortname/Sites/sitename.com/public_html/admin/editable.class.php on line 275 

bearbeiten ist die komplette Datei:

Pastebin of editable.class.php

In meiner Seite habe ich ein

<?php 
    include_once 'admin/editable.class.php'; 

    $page = new page(6, 2, 0); 
    echo $page->get(); 
?> 

Es ist Aufgabe umfassen bekam ist es, alle Seitenelemente zu greifen aus der DB und wirf es auf die Seite.

Die Include erscheint später in der Seite als auch (in der Fußzeile)

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

Was ich davon ausgehen, ist das, was die CMS Infoleiste zeigt und Schaltflächen, wenn Sie ein authentifizierter Benutzer sind. Das Problem ist, ich kann mich nicht authentifizieren und ich kann die Warnungen nicht weggehen. Hier ist die Authentifizierungsfunktionen in 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"); 
    } 

Ich versuchte <?php setcookie("username", "", time() - 1, "/", ".sitename.com"); ?> Hinzufügen zu sehen, ob ich die Cookie-Daten löschen konnte und entfernen Sie die Admin-Tools aber, dass auch nicht funktioniert. Was fehlt mir in meiner lokalen Entwicklungsumgebung, die diese Fehler verursachen würde?

Antwort

3

Es gibt Ihnen einen Hinweis, denn wenn Sie die Schaltflächenvariable definieren, liegt sie außerhalb des Bereichs. So ändern Sie einfach den Code aus:

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

dazu:

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

Dies ist eine Abkürzung Code können Sie die Klammern, wenn Sie möchten.

+0

Hier ist die Paste bin ... http://pastebin.com/ir3uAXK2 – Ofeargall

+0

Ich entschuldige mich für das Verlassen der mod relevanten Teil. – Ofeargall

+0

Awesome, aktualisierte meine Antwort (es ist eine ziemlich einfache Lösung). –

1

Ich vermute, die Dev-Umgebung hat die Warnstufe eingeschaltet, weshalb Sie dies bekommen.

Gehen Sie zu der betreffenden Datei und vor Zeile 275 definieren Sie die Variable 'buttons' als leere Zeichenfolge. Sie müssen die Variable nur initialisieren, bevor sie verwendet wird.

$buttons = ''; 

nach dem Betrachten codebin hinzugefügt:

versuchen

Ändern
$item["buttons"] = $buttons; 

zu

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

auf diese Weise ruft es nur $ Tasten, wenn sie bereits eingestellt worden ist, die Sie einstellen müssen $item['buttons'] zu einer leeren Zeichenfolge oder es wird einen ähnlichen Fehler werfen, wenn später verwendet wird, andernfalls

+0

Aber die Variable sollte nur verfügbar sein, wenn Sie ein angemeldeter Benutzer sind. Dies geschieht, wenn ich die Seite ohne irgendeine Anmeldung in meiner lokalen Umgebung lade. – Ofeargall

+0

siehe Änderungen an der Antwort –

Verwandte Themen