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

时间:2018-08-30 03:21:00

标签: php css variables

我正在尝试使用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 :(得分:1)

如果已经有输出,则不能使用标题函数。 请参阅文档:http://php.net/manual/fr/function.header.php

您必须先设置标题,例如:

DECLARE @order int = 
( 
   select count (a.patientSID) 
     from CPRSOrder.CPRSOrder a
     join sstaff.SStaff b on b.staffSID = a.EnteredbyStaffSID 
     join spatient.spatient c on c.patientSID = a.patientSID
    where b.staffName = xxxxxxxx
      and a.enteredDateTime >= '20180801' and a.enteredDateTime <= '20180828'
)

DECLARE @note int = ( 
  select count (a.patientSID) 
    from tiu.tiudocument a
    join sstaff.SStaff b on b.staffSID = a.EnteredbyStaffSID 
  --join spatient.spatient c on c.patientSID = a.patientSID
   where b.staffName = xxxxxxxx
     and a.episodeBeginDateTime >= '20180801' and a.episodeBeginDateTime     <= '20180828'
)

SELECT @note AS [note count]
      ,@order AS [order count]
      ,@order + @note AS [total]

答案 1 :(得分:0)

我认为您也缺少包含或要求声明,以将$ test变量添加到您的style.php中。

答案 2 :(得分:0)

新答案

PHP常量需要在生成页面/脚本时生成,并且仅在执行该脚本时才持续。

如果您希望常量(如此处所示)持续存在于网站的多个脚本/页面加载中,则需要使用$_SESSION(或$_COOKIE)值在页面之间传递变量。

因此:

当您在此处设置常量时

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

使用$_SESSION值;只需忽略style.php页中的常量并使用会话变量即可。

请确保在top of every script you want to read or write season data上运行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>
         ....
    

旧答案

基于this answer,您可以执行以下操作:

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

     ...
}

还请注意,通常会保留双下划线常量(_ _ WORD _ _),并且对于自定义常量使用这种样式是不赞成的。

调试说明:
在您的print语句之前,请勿header(...)进行任何PHP输出。 header() 必须 出现在向浏览器输出任何内容之前。