2016-02-13 5 views
0

Не уверен, что у меня есть уникальная проблема или просто не удалось найти правильные термины в Google, чтобы найти ее, но моя проблема связана с неопределенной переменной и не в состоянии проверить его.Определение того, установлена ​​ли переменная во включенном файле в PHP

На моем сайте для меню я включаю php-файл со всеми элементами меню в нем, а затем выделяю различные части по мере необходимости. Моя проблема в том, что один из параметров меню показывает текущего пользователя. Конечно, если не войти в систему, это не задано, что приводит к тому, что файл журнала заполняется неопределенными ошибками.

Вот структура:

static.php:

<?php 
$menu='  
    <ul class="menu"> 
     <li class="menu"><a href="#">Home</a></li> 
     <li class="menu"><a href="#">Option</a></li> 
    </ul>'; 
$usermenu=' 
    <ul class="usermenu"> 
     <li class="menu"><a href="#">'.$_SESSION['user_name'].'</a></li> 
     <li class="menu"><a href="#">Change Pass</a></li> 
     <li class="menu"><a href="#">Logout</a></li> 
    </ul>'; 

index.php:

<?php include 'static.php'; 
    echo "$menu"; 
    if ($login->isUserLoggedIn() == 'true') { 
     echo "$usermenu"; 
    } 
    if ($login->isUserAdmin() == 'true') { 
     echo "$usermenuadmin"; 
    } 
?> 

Как вы можете видеть, $_SESSION['user_name'] находится в статическом файле, так что если вы не вошли в систему, он не установлен и создает ошибку.

Обычно я просто использовал if (!session_status() == PHP_SESSION_NONE) {}, но так как он посередине, я наклоняю его.

Один из способов исправить это будет иметь отдельный статический файл для таких вещей и включать его только в том случае, если сеанс установлен, но тогда мне нужно будет пойти и изменить код на многих страницах и должны будут иметь отдельный файл для одной записи.

Я пропустил что-то здесь или есть простой способ исправить это? Из того, что я нашел в Интернете, невозможно откликнуться на php-код, чтобы предотвратить любые обычные способы его исправления.

EDIT: Решил его, см. Мой ответ ниже!

+0

Был ли у вас сеанс юр? Как 'session_start(); ' – devpro

ответ

0

Пожалуйста, используйте isset($var), чтобы проверить, была ли переменная объявлена ​​/ установлена.

if(isset($_SESSION) && isset($_SESSION['user_name'])) 


Итак, ваш static.php будет выглядеть следующим образом,

$usermenu=''; 
if(isset($_SESSION) && isset($_SESSION['user_name'])) 
{ 
    $usermenu='<ul class="usermenu"> 
     <li class="menu"><a href="#">'.$_SESSION['user_name'].'</a></li> 
     <li class="menu"><a href="#">Change Pass</a></li> 
     <li class="menu"><a href="#">Logout</a></li> 
    </ul>'; 
} 

Выше, вы бы пустую строку в UserMenu$, если $ _SESSION и $ _SESSION [ 'user_name '] не установлены.
В качестве альтернативы вы можете позвонить @isset, чтобы избежать предупреждений в вашем журнале ошибок PHP.
Серьезным программный код будет использовать более сложный набор функций для проверки, если пользователь вошел в систему

+0

Да, это не что-то серьезное, просто хобби, поэтому я пытаюсь учиться. Изменит это спасибо! – iamalion

0

Вы не использовали session_start(); в static.php файл и использовать isset() для проверки либо переменной или множества индексов или нет.:

Модифицированный код:

<?php 
session_start(); 

$menu=' 
<ul class="menu"> 
<li class="menu"><a href="#">Home</a></li> 
<li class="menu"><a href="#">Option</a></li> 
</ul>'; 
$usermenu=' 
<ul class="usermenu"> 
<li class="menu"> 
<a href="#"> 
'.(isset($_SESSION['user_name']) ? $_SESSION['user_name'] : "Guest") .' 
</a></li> 
<li class="menu"> 
<a href="#">Change Pass</a></li> 
<li class="menu"><a href="#">Logout</a></li> 
</ul>'; 
+0

Сессия запускается на странице, которая включает static.php. У пользователей без входа нет сеанса. – iamalion

+0

@iamalion, чем в этом случае он будет печатать Гость .. Неужели? – devpro

+0

Это меню даже не отображается, когда вы не вошли в систему, чтобы он ничего не отображал. Я закончил использовать другое решение, просто не устанавливая переменную '$ usermenu', если сеанс отсутствует. – iamalion

0

Друг показал мне супер простое решение, которое я с видом.

if (isset($_SESSION['user_name'])) { 
$usermenu='  <ul class="usermenu"> 
} 

Я просто не думал ставить его перед объявлением $usermenu. Понедельник ...

0

Способ структурирования вашего кода не является хорошим.

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

По крайней мере, включенный файл не производит прямой вывод в то время, когда он включен. Я бы поменял файл include на ...

<?php 

function menu($authuser, $isadmin) 
{ 
    print '<ul class="menu"> 
    <li class="menu"><a href="#">Home</a></li> 
    <li class="menu"><a href="#">Option</a></li> 
    </ul>'; 
    if ($authuser) { 
     print '<ul class="usermenu"> 
     <li class="menu"><a href="#">'.$authuser.'</a></li> 
     <li class="menu"><a href="#">Change Pass</a></li> 
     <li class="menu"><a href="#">Logout</a></li> 
     </ul>'; 
    } 
    if ($isadmin) { 
     ... 
    } 
} 
+0

Я не разработчик, просто изучаю PHP для развлечения на самом деле, поэтому я уверен, что сделал неудачный выбор, но я возвращался и исправлял их, используя рекомендуемые методы и передовые методы. Правильно, страница, которая включает static.php, запускает сеанс. Я показал сильно сокращенную версию кода. – iamalion

+0

И для примера, который вы указали, вызов будет таким же простым, как «menu ($ _SESSION ['user_name'], $ _SESSION ['isadmin]);'? На самом деле это довольно легко. Я посмотрю, используя это вместо спасибо! – iamalion

Смежные вопросы