PHP / CSS: моя переменная сеанса не загружена - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь загрузить параметры с php (хранится в моей базе данных), чтобы обновить мой css. После входа в систему я запускаю сеанс и загружаю css в свой заголовок:

<head>      
<?PHP 
    define('THEME',  $_SESSION["theme"]);   
?>      
<link type="text/css" rel="stylesheet" href="./public_html/css/style.php" />
</head>

Когда я пытаюсь получить доступ к тесту в style.php, он не работает:

<?php
    header("Content-type: text/css; charset: UTF-8");
    switch(constant(THEME)){ something...}
?>

Что я делаю не так? Почему я не могу получить доступ к моей переменной?

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Я думаю, что вы также пропустили оператор include или require для добавления переменной $ test в ваш style.php

0 голосов
/ 30 августа 2018

Новый ответ

PHP-константы должны генерироваться при создании страницы / скрипта и будут действовать только для этого скрипта выполнения.

ЕСЛИ вам нужны константы (как здесь), которые длятся более чем несколько сценариев / загрузок страниц вашего сайта, вам нужно использовать значения $_SESSION (или $_COOKIE) для переноса переменной со страницы на страницу.

Таким образом:

Как вы установите здесь свою константу:

<?PHP 
    define('THEME',  $_SESSION["theme"]);   
?> 

Использование значения $_SESSION; просто игнорируйте константу на вашей странице style.php и используйте переменную сеанса.

Обязательно запускайте session_start(); в верхней части каждого сценария, для которого вы хотите прочитать или записать данные сезона .

следующим образом:

  • style.php:

    <?php
        session_start(); //IMPORTANT! 
        header("Content-type: text/css; charset: UTF-8");
        switch($_SESSION["theme"]){ 
           case "a":
              ....
              break;
           case "b":
              ...
              etc.
           }
    ?>
    <html>
         ....
    

Старый ответ

На основании этого ответа вы можете сделать:

switch (constant("__TEST__")){
     case "Ok":
        print "this constant is ".__TEST__;
        break;

     ...
}

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

Примечание отладки:
НЕ print вывод PHP перед вашим header(...) оператором. header() MUST перед тем, как что-либо будет выведено в браузер.

0 голосов
/ 30 августа 2018

Вы не можете использовать функцию заголовка, если у вас уже есть выход. Смотрите документацию: http://php.net/manual/fr/function.header.php

Вы должны установить свой заголовок, прежде чем что-то еще, например:

 <?php
    header("Content-type: text/css; charset: UTF-8");
    print $test; // prints KO
    print __TEST__; // prints KO
    switch(__TEST__){ something...}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...