if(!isset($_COOKIE['user']) || !isset($_COOKIE['admin'])):

Вообщем я столкнулся с такой проблемой: Мне надо сделать проверку сохранена ли cookie ['user'] или ['admin']. Если нет, то выводить в header болк с кнопкой входа/регистрации, а если есть, то проверить isset($_COOKIE['admin']). Если да, то вывести блок с кнопками добавить товар и выход, если isset($_COOKIE['admin']) неверно, то просто кнопку выхода. Весь код рабочий, если по одиночке делать проверку(Например:if(!isset($_COOKIE['admin'])):), то выведет кнопки добавить товар и выход, а если (if(!isset($_COOKIE['user'])):), то только кнопку выхода. Вот основной код:

<?php 
  if(!isset($_COOKIE['user']) || !isset($_COOKIE['admin'])):
     ***Кусок html разметки***
?>
<?php else: ?>
     <?php if(isset($_COOKIE['admin'])): ?>
         ***Кусок html разметки***
     <?php endif; ?>
     ***Кусок html разметки***
<?php endif; ?>

У меня не получается всё это объединить, чтобы была одновременная проверка двух cookie.

if(!isset($_COOKIE['user']) || !isset($_COOKIE['admin'])):
Не рабочий код(но в моём уме он должен работать))

Может кто-то знает как эту проблему решить?

<?php                      
   if(!isset($_COOKIE['user']) || !isset($_COOKIE['admin'])) {                         
      echo('                             
         HTML Code                         
      ');                     
   } else {                         
      if(isset($_COOKIE['admin'])) {                             
         echo('                                 
           HTML Code                             
         ');                         
   };                         
   echo('                             
      HTML Code                         
   ');                     
   };                 
?>

Код выше не решает проблему и пробный вариант. Это код создания куки при авторизации:

<!-- В auth.php (авторизация) -->
    else if ($user['admin'] != 0) {
        setcookie("admin", $user['name'], time() + (3600 * 12 * 30), "/"); // 1(имя куки) 2(у переменной $user берём имя, которое берётся с бд) 3(время жизни куки)
        header('location: /');
        session_destroy();
        exit();
    } else {
        setcookie("user", $user['name'], time() + (3600 * 12 * 30), "/"); // 1(имя куки) 2(у переменной $user берём имя, которое берётся с бд) 3(время жизни куки)
        header('location: /');
        session_destroy();
    };

Ответы (2 шт):

Автор решения: darkvortek

Почему не написать так?

if (isset($_COOKIE['admin']) || isset($_COOKIE['user'])) {
    if (isset($_COOKIE['admin'])) {
        //admin code
    } else {
        //user code
    }
} else {
    //login html
}
→ Ссылка
Автор решения: Егор Банин

В простом коде проще разобраться. У опытных программистов есть несколько приёмов, позволяющих упростить код типа вашего. Во-первых надо дать осмысленные имена выражениям, которые проверяются в if'ах:

<?php

$isUser = isset($_COOKIE['user']);
$isAdmin = isset($_COOKIE['admin']);

?>

Во-вторых лучше проверять позитивные условия (нашим мозгам так проще воспринимать утверждения):

<?php if ($isUser || $isAdmin): ?>
    <?php if ($isAdmin): ?>
        кнопка "Добавить товар"
    <?php endif ?>
    кнопка "Выход"
<?php else: ?>
    кнопка "Логин"
<?php endif ?>

Как видите, так гораздо проще.


UPD: Обратите внимание, что кука -- просто HTTP-заголовок, который отправляет пользователь (любой пользователь может отправить "admin"). Если вам надо ограничить доступ к админскому функционалу, то следует использовать сессии.

→ Ссылка