Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在我的站点上创建一个var,然后在另一个页面上显示基于该var的内容?_Php_Html_Smarty_Var - Fatal编程技术网

Php 如何在我的站点上创建一个var,然后在另一个页面上显示基于该var的内容?

Php 如何在我的站点上创建一个var,然后在另一个页面上显示基于该var的内容?,php,html,smarty,var,Php,Html,Smarty,Var,我可能想得太多了,但我有不同用户级别的网站。我想在我的站点的标题模板中创建一个特定的var(smarty或PHP),然后根据这个值,在另一个页面上显示某些代码。我尝试过几种方法,但都没有成功。我尝试在header.php中创建一个简单函数: if( $user->level_info.level_name == Basic ) { $basic_user == yes; } if($user->level_info.level_name == Basic){

我可能想得太多了,但我有不同用户级别的网站。我想在我的站点的标题模板中创建一个特定的var(smarty或PHP),然后根据这个值,在另一个页面上显示某些代码。我尝试过几种方法,但都没有成功。我尝试在header.php中创建一个简单函数:

if( $user->level_info.level_name == Basic )
{
$basic_user == yes;
}
    if($user->level_info.level_name == Basic){
       session_start();
       $_SESSION['profile'] = 'Basic';
    }
然后在video.tpl中:

{if $basic_user == yes}
some code
{/if}
    session_start();
    if ($_SESSION['profile']=='Basic'){
       //some code
    }
{if $user->level_info.level_name != Basic}
...
{/if}
它不起作用。我也在smarty(header.tpl)中试用过

然后类似于“var=xx,一些代码”,但老实说,我甚至不记得我是如何在video.tpl中尝试的,但我肯定这是错误的。有人能帮忙吗?我相信这很简单,但我被困住了,很沮丧。 谢谢

我也在video.php中尝试过:

if($user->level_info.level_name != Premium){
header("Location: nopermission.php"); exit();       
} 

它“有效”,但所有用户,无论是基本用户还是高级用户,都会被转发到无权限页面。我很困惑。

为此,我有时会使用会话变量和用户角色信息

例如:

$_SESSION['profile'] = 'Basic';
查看会话变量。

记住在每个页面中恢复会话,以便访问变量

session_start();
使用相同的代码,可以执行以下操作:

在header.php中:

if( $user->level_info.level_name == Basic )
{
$basic_user == yes;
}
    if($user->level_info.level_name == Basic){
       session_start();
       $_SESSION['profile'] = 'Basic';
    }
然后在video.tpl中:

{if $basic_user == yes}
some code
{/if}
    session_start();
    if ($_SESSION['profile']=='Basic'){
       //some code
    }
{if $user->level_info.level_name != Basic}
...
{/if}

您可以使用会话cookies

  • 会话
    page1.php

    <?php
    会话_start()
    //存储会话数据
    $\u会话['user\u type']='basic'
    ?>

    page1.php

    <?php
    会话_start()
    if(isset($SESSION['user\u type']))//检查会话变量是否已设置
    {
    $user=$SESSION['user_type'];
    //在这里,您可以比较变量可能持有的所有可能值
    如果($user=='Basic')

    else if($user=='Admin')

    }
    ?>

  • 饼干
    page1.php

    <?php
    $expire=time()+60*60*24*30
    setcookie(“用户类型”、“基本”和$expire)
    ?>

    page2.php

    <?php
    如果(isset($\u COOKIE[“用户类型”])
    {
    //在此处检查可能的值,如上图所示
    }
    ?>

你可以选择他们中的任何一个, 但是看到这个了吗

主要区别在于安全性,因为如果直接使用cookie,客户端可以自己查看和/或编辑cookie,但对于会话,数据存储在服务器端,因此客户端无法直接访问

因此,如果数据只持续该会话,我更喜欢使用会话


我让它工作了!只需在video.tpl中将我的原始代码的一个版本向下移动一点:

{if $basic_user == yes}
some code
{/if}
    session_start();
    if ($_SESSION['profile']=='Basic'){
       //some code
    }
{if $user->level_info.level_name != Basic}
...
{/if}

我不知道为什么它在那里工作,而且没有进一步的改进,但我测试了它,它完全满足了我的需要。非常感谢所有回复的人

您有
$basic\u user==yes。它应该是
$basic\u user=yes查看使用POST或GET传递此变量。然后在php中编写一个条件if来检查POST/GET数据。我删除了额外的=并再次尝试,但没有成功。我不知道如何使用POST或GET…它不起作用。我不明白。我最初的条件if/else语句在其他地方可以使用,但在video.tpl/video.php中没有任何功能。我已经尝试了这里显示的所有方法。根据PHP文档$\u SESSION“是一个‘超全局’变量,或自动全局变量。这意味着它在整个脚本的所有范围内都可用”。您必须深入研究您的代码,因为您的问题似乎存在于其他地方。我认为您无法从那里访问$user对象。在处理模板文件时,必须确保smarty如何处理它们,因为它们不是作为php文件处理的。抱歉,我从未与smarty合作过,因此我无法在该主题上进一步帮助您。在Google中查找它时,我发现您可以使用特定语法将变量传递给模板:但这可能还不够,因为您希望向每个用户显示不同的视图。我建议为每个用户和控件使用从控制器渲染的视图(模板)。看看这个:会话方法根本不起作用。非常困惑:(@zoldos请说得更具体些,什么不起作用?是否出现了一些错误/异常?尝试回显$SESSION['user\u type']刚设置完,然后从该页面调用第二个页面,启动新会话,然后在那里回显。如果仍然不起作用,我建议创建两个空文件,然后再试一次,以保持简单。