Ответы пользователя по тегу PHP
  • Как заставить условия работать?

    Какая-то адовая смесь получилась.

    Для начала стоит разделить условие "пользователь авторизован"/"пользователь не авторизован". Потом убедиться, что логика сравнения правильная.

    if ($user->is_logged) {
      if ($_SERVER['REQUEST_URI'] == '/page-1' || $_SERVER['REQUEST_URI'] == '/page-2') {
        // пользователь авторизован и запрашивает page-1 или page-2
      }
    } else {
      if ($_SERVER['REQUEST_URI'] == '/' || $_SERVER['REQUEST_URI'] == '/index.php' || $_SERVER['REQUEST_URI'] == '/page-3') {
        // Пользователь не авторизован и запрашивает /, index.php или page-3
      }
    }
    Ответ написан
    6 комментариев
  • Как работать с class?

    У вас в классе используется устаревшая форма конструктора (вместо __constructor()), которая к тому же не принимает ни одного аргумента.

    В конструкотре удалять — грешновато. Поэтому для удаления лучше отдельный метод сделать, который потом вызывать (или после инициализации, или статичный метод).
    Ответ написан
    8 комментариев
  • Http аутентификация работает неправильно, почему?

    Я думаю, что проблема в том, что в первом случае вы каждый раз посылаете 401 статус, независимо от того, ввёл ли уже пользователь правильные данные или нет. Попробуйте обернуть это во что-то вроде:

    $authenticated = false;
    if (isset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) {
      // ищем пользователя в базе
      // выставляем $authenticated в true/false в зависимости от того, нашёлся ли пользователь.
    }
    
    if ($authenticated) {
      // показываем страницу аутентифицированному пользователю
    } else {
      header('HTTP/1.1 401 Unauthorized');
      header('WWW-Authenticate:Basic realm="petrocks"');
    
      echo 'Представься, мразь', PHP_EOL;
    }
    Ответ написан
    Комментировать