【问题标题】:PHP/CSS: My session variable is not loadedPHP/CSS:我的会话变量未加载
【发布时间】:2018-08-30 03:20:59
【问题描述】:

我正在尝试使用 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...}
?>

我做错了什么?为什么我无法访问我的变量?

【问题讨论】:

  • 标头仅在还没有任何输出时才有效
  • 很抱歉,我不确定我是否理解。到目前为止,我可以在标题中访问我的变量(我打印以测试...),但我无法在 style.php 中访问它。我不知道如何访问它。请问有什么建议吗?
  • header(...) 置于print 命令之上
  • 我试过了,还是没变。

标签: php css variables


【解决方案1】:

如果您已经有输出,则不能使用标头功能。 请参阅文档: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...}
?>

【讨论】:

  • 感谢您的链接。无论如何它不会改变任何东西。我仍然有同样的问题。我无法访问我的变量...我不知道出了什么问题
【解决方案2】:

新答案

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 _ _) 通常是保留的,并且不赞成将这种样式用于自定义常量。

调试说明:
不要在header(...) 语句之前print 任何 PHP 输出。 header() 必须 在任何内容输出到浏览器之前出现。

【讨论】:

  • 感谢您的来信,非常感谢。无论如何,它仍然不起作用。我无法访问我的会话变量。我有一个这样的 header.html:&lt;head&gt; &lt;?PHP define('THEME', $_SESSION['theme']); ?&gt; &lt;link type="text/css" rel="stylesheet" href="./public_html/css/style.php" /&gt; &lt;/head&gt; 我的 style.php 是这样的:header("Content-type: text/css; charset: UTF-8"); switch(constant(THEME)){...something}
  • 您没有在 switch 语句中将THEME 放在引号中。 @BenoitFrontzak
  • 我试过了。现在警告消息是:警告:常量():找不到常量主题
  • @BenoitFrontzak 请查看我更新的答案。这应该可以解决您的问题。
【解决方案3】:

我认为您还缺少一个 include 或 require 语句来将 $test 变量放入您的 style.php

【讨论】:

  • 谢谢,但我不知道要包括什么,登录后,我设置了一些我可以在所有页面中访问的会话变量,但 'style.php'
  • 你在 style.php 中启动了会话吗?
猜你喜欢
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多