PHP / CSS:未加载我的会话变量

PHP / CSS:未加载我的会话变量

问题描述:

I'm trying to load parameters with php(stored in my database) to update my css. After login, I start a session and load css in my header:

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

When I try to access test in style.php it doesn't work:

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

What am I doing wrong? Why can't I access my variable?

New Answer

PHP Constants need to be generated when the page/script is generated and will only last for that script execution.

IF you want constants (As here) which last over multiple script/page loads of your website you need to use $_SESSION (or $_COOKIE ) values to carry the variable from page to page.

Thus:

As you set your constant here:

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

Using a $_SESSION value; simply ignore the constant in your style.php page and use the session variable.

Be sure to run session_start(); at the top of every script you want to read or write season data.

thus:

  • style.php:

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

Old Answer

Based on this answer you can do:

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

     ...
}

Please also note that double underscore constants (_ _ WORD _ _) are generally reserved and using this style for custom constants is frowned upon.

Debug note:
Do NOT print any PHP output before your header(...) statement. The header() MUST come before anything is output to the browser.

You can't use the header function if you already have an output. See the documentation : http://php.net/manual/fr/function.header.php

You must set your header before anything else, like this :

 <?php
    header("Content-type: text/css; charset: UTF-8");
    print $test; // prints KO
    print __TEST__; // prints KO
    switch(__TEST__){ something...}
?>

I think you are also Missing an include or require Statement to get the $test variable into your style.php