Странное поведение из заголовка PHP () - PullRequest
1 голос
/ 04 марта 2011

Я пытаюсь выписать чек для перенаправления пользователей на основании их прогресса в процессе регистрации на сайте.У меня есть это:

if($user = VRComponent::getLogin()) {
    if(VR::exists('vr_user','Signup',"userID={$user->ID}")) {
        $step = VR::select('vr_user','Signup',"userID={$user->ID}");
        $step = intval($step[0]['step']);
        if(!isset($_GET['step']) || $step != intval($_GET['step'])) {
            switch($step) {
                case 1: header("Location: /signup/one"); exit; break;
                case 2: header("Location: /signup/two"); exit; break;
                case 3: header("Location: /signup/three"); exit; break;
                case 4: header("Location: /signup/four"); exit; break;
            }
        }
    } else {
        header("Location: /account");
        exit;
    }
} else {
    header("Location: /");
    exit;
}

Существующие и выбранные функции в основном являются псевдонимами функций mysql.

По сути, это проверяет, вошел ли пользователь в систему. Если это так, он проверяет, завершили ли они процесс регистрации.Если нет, он проверяет, является ли переданная переменная «page» фактически последней страницей, на которой они были.Если нет, он перенаправляет их на правильную страницу.

Логика работает, однако все внешние файлы js и css, на которые ссылается страница, не загружаются.Странно то, что они не выдают 404, вместо этого единственное содержимое файлов:

Failed to load source for: <a href="https://domain.com/path/to/file/style.css" rel="nofollow">https://domain.com/path/to/file/style.css</a>

Другая странная вещь - файлы не загружаются, даже еслиусловие для утверждения if ложно.Закомментирование оператора switch (даже если условие if ложно) позволяет загружать файлы, но, конечно, логика не будет правильной.

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

Заранее спасибо
-D

Ответы [ 2 ]

3 голосов
/ 04 марта 2011

Я полагаю, вы используете мод-перезапись для обработки signup/*?Если это так, вам может потребоваться объявить <base href="APPROPRIATE BASE" /> в <head> вашего HTML, чтобы браузер не СМОТРЕЛ в папку предполагаемой регистрации для css / js =)

0 голосов
/ 04 марта 2011

Обновление: Я спал на нем, и когда я проснулся, я понял реальную проблему (удивительно, что может сделать ясный ум).Оказывается, PHP делал именно то, что я говорил.Поскольку я никогда не был удовлетворен какими-либо сторонними PHP-фреймворками, я решил создать свою собственную немного назад.Одна из вещей, которую он делает, это автоматически объединяет все файлы CSS и JS, используемые на любой странице, в единые файлы, чтобы уменьшить количество запросов http.Он также отражает требования главной страницы в этих файлах css / js, и у меня настроен apache, поэтому он будет выполнять встроенный PHP.Поэтому код проблемы требовался файлами js / css, которые затем перенаправлялись на одну из страниц регистрации, поскольку $ _get ['step'] не был определен.Такие вещи действительно радуют меня тем, что я использую свою собственную структуру.Конечно, иногда это заставляет меня хотеть стать средневековым, как человек с топором в некоторых зомби, но свобода, которую он предоставляет, и способность развивать его, когда я иду, намного перевешивает ярость.Не только это, но и делает все намного проще (когда я на самом деле код это правильно), чем любой другой фреймворк, который я использовал.Может быть, когда-нибудь, когда я почувствую, что он готов к прайм-тайму, я опубликую его для публики.

Старый ------------------------------------
После нескольких часов исследований я исправил это!

Проблема заключалась в петле перенаправления.По неизвестным мне причинам внешние файлы запускались через блок в моем OP из файла php, который затем менял местоположение на один из этих перенаправлений.
Чтобы исправить это, я проверил наличие «.css» и «.js» в php_self и запретил перенаправление, если оно найдено.Вот модифицированный код:

if($user = VRComponent::getLogin()) {
    if(VR::exists('vr_user','Signup',"userID={$user->ID}")) {
        $step = VR::select('vr_user','Signup',"userID={$user->ID}");
        $step = intval($step[0]['step']);
        $css = stripos($_SERVER['PHP_SELF'],'.css');
        $js = stripos($_SERVER['PHP_SELF'],'.js');
        if(!$css && !$js && (!isset($_GET['step']) || $step != intval($_GET['step']))) {
            switch($step) {
                case 1: header('Location: /signup/one');
                    break;
                case 2: header('Location: /signup/two');
                    break;
                case 3: header('Location: /signup/three');
                    break;
                case 4: header('Location: /signup/four'); 
                    break;
            }
        }
    } else
        header("Location: /account");
} else
    header("Location: /");

Да, это грубо, и я рано или поздно разработаю более элегантное решение, но сейчас это придется сделать.

Спасибовсем за помощь.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...