Функция не определяющая переменную в PHP - PullRequest
2 голосов
/ 28 марта 2012

Я унаследовал сайт от предыдущего (больше не доступного для помощи) разработчика, и я не очень разбираюсь в PHP-кодере, так что терпите меня.

Я получаю сообщение об ошибке, что некоторые переменные не определены, и панель инструментов CMS Admin продолжает отображаться вверху страницы, даже если я не вошел в систему.

Важное примечание Это происходит только в моей локальной среде разработки.

Ошибка:

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

Редактировать Вот полный файл:

Pastebin из 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 ]

3 голосов
/ 28 марта 2012

Он уведомляет вас, потому что когда вы определяете переменную кнопок, это выходит за рамки.Итак, просто измените свой код с:

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

на этот:

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

Это сокращенный код, вы можете добавить скобки, если хотите.

1 голос
/ 28 марта 2012

Я подозреваю, что в среде dev включен уровень предупреждения, поэтому вы получаете это.

Перейдите к рассматриваемому файлу и перед строкой 275 определите переменную 'buttons' как пустую строку.Вам просто нужно инициализировать переменную перед ее использованием.

$buttons = '';

добавлено после просмотра кодовой строки:

попробуйте изменить

$item["buttons"] = $buttons;

на

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

таким образом, он вызывает только кнопки $, если он уже установлен, вам нужно установить $item['buttons'] в пустую строку, иначе будет выдано аналогичное сообщение об ошибке, если его использовать позже, в противном случае

...