-1

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?

Ben
  • 63
  • 2
  • 9
  • header only works if there hasn't been any output yet – Gerard Aug 30 '18 at 03:26
  • I'm sorry i'm not sure I understand. So far I can access my variable in the header (I print to test...) but I can't access it in style.php. I don't know how to do to access it. Any suggestions please? – Ben Aug 30 '18 at 03:43
  • Place your `header(...)` ABOVE your `print` commands – Martin Aug 30 '18 at 14:01
  • I tried but it still doesn't change. – Ben Aug 31 '18 at 03:31
  • Possible duplicate of [Reference - What does this error mean in PHP?](https://stackoverflow.com/questions/12769982/reference-what-does-this-error-mean-in-php) – miken32 Sep 26 '18 at 18:03

3 Answers3

1

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...}
?>
Martin
  • 22,212
  • 11
  • 70
  • 132
WildSteak
  • 31
  • 4
  • Thanks for the link. Anyway it doesn't change anything. I still have the same issue. I can't access my variable...I don't know what is wrong – Ben Aug 31 '18 at 02:23
0

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

BlackNetworkBit
  • 768
  • 11
  • 21
0

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.

Martin
  • 22,212
  • 11
  • 70
  • 132
  • Thanks for the note, much appreciated. Anyway it still doesn't work. I can't access my session variable. I've got a header.html like this : ` ` My style.php like this: `header("Content-type: text/css; charset: UTF-8"); switch(constant(THEME)){...something} ` – Ben Aug 31 '18 at 03:15
  • You have not put `THEME` in quotes in your switch statement. @BenoitFrontzak – Martin Aug 31 '18 at 09:00
  • I tried. Now the warning message is: Warning: constant(): Couldn't find constant THEME – Ben Aug 31 '18 at 09:50
  • @BenoitFrontzak please review my updated answer. This should solve your issue. – Martin Aug 31 '18 at 11:16