【问题标题】:Return Different PHP Array Values Based on A User ID-Related Constant根据用户 ID 相关的常量返回不同的 PHP 数组值
【发布时间】:2013-07-23 20:46:39
【问题描述】:

我正在为 HTML 模板处理一组标记。其中两个('{SYS_MENU}' 和 '{SUB_MENU}')用于为 Web 应用程序生成控制按钮。现在,在验证用户凭据之前,按钮会显示在登录页面上,我需要更改代码,以便在用户登录并到达主菜单之前隐藏按钮。当有人在他们的浏览器中键入 http: 地址并到达登录页面时,系统会在 MySQL 会话表中为他们启动一个会话,USER_ID = 0。在他们登录后,USER_ID 更改为初始注册时分配给他们的任何数字(示例:USER_ID = 54),并在会话结束时注销后返回 0。将此常量绑定到按钮似乎是最好的解决方案,我发现它在过去类似情况下也可以工作。

这是原始数组:

$template_vars = array(

    '{LANG_DIR}' => $lang_text_dir,
    '{TITLE}' => theme_page_title($section),
    '{CHARSET}' => $charset,
    '{META}' => $meta,
    '{GAL_NAME}' => $CONFIG['gallery_name'],
    '{GAL_DESCRIPTION}' => $CONFIG['gallery_description'],
    '{SYS_MENU}' => theme_main_menu('sys_menu'),
    '{SUB_MENU}' => theme_main_menu('sub_menu'),
    '{ADMIN_MENU}' => theme_admin_mode_menu(),
    '{CUSTOM_HEADER}' => $custom_header,
    '{JAVASCRIPT}' => theme_javascript_head(),
    '{MESSAGE_BLOCK}' => theme_display_message_block(),
);

我做的第一件事是直接在 HTML 模板中处理引用。我在 w3schools 上看到了一个示例,看起来您只需将 PHP 脚本输入 HTML 并使其解析即可。除了将一堆文本随机回显到页面中之外,这没有做任何事情。然后我发现另一个引文说你必须先使用 .HTACCESS 条目激活 PHP,然后它才能直接在 HTML 中工作。但这也没有达成交易。

我知道将数组中的 '{SYS_MENU}' 和 '{SUB_MENU}' 值更改为 => "" 会产生我想要的结果(即让菜单按钮消失)。所以我的下一个想法是我将创建一个 IF 语句,它根据情况返回数组的两个版本,例如:

if(USER_ID != 0)

{

return  $template_vars = //FIRST VERSION OF ARRAY WITH FULL VALUES//

}

else 

{

return $template_vars = //SECOND VERSION OF ARRAY WITH ONLY => ""//

}

但所做的只是导致应用程序加载在没有错误反馈的白屏处终止。

我最近的尝试来自我在 Stack Overflow 上阅读的内容。我知道您不能将 IF 语句放入数组中。但是此链接上的文章描述了一种解决方法:

If statement within an array declaration ...is that possible?

于是我将数组改写如下:

template_vars = array(

    '{LANG_DIR}' => $lang_text_dir,
    '{TITLE}' => theme_page_title($section),
    '{CHARSET}' => $charset,
    '{META}' => $meta,
    '{GAL_NAME}' => $CONFIG['gallery_name'],
    '{GAL_DESCRIPTION}' => $CONFIG['gallery_description'],
    '{SYS_MENU}' => ('USER_ID != 0' ? theme_main_menu('sys_menu') : ""),
    '{SUB_MENU}' => ('USER_ID != 0' ? theme_main_menu('sub_menu') : ""),
    '{ADMIN_MENU}' => theme_admin_mode_menu(),
    '{CUSTOM_HEADER}' => $custom_header,
    '{JAVASCRIPT}' => theme_javascript_head(),
    '{MESSAGE_BLOCK}' => theme_display_message_block(),
);

但这似乎根本没有效果。应用程序不会崩溃,但无论您是登录还是退出,按钮都是静态的。

我的问题是:我错过了什么?我可以看到这是可能的。但是我已经尝试了一天半的时间,似乎只是在围绕解决方案跳舞。您的想法将不胜感激。

【问题讨论】:

  • 不返回...只是分配

标签: php html arrays constants token


【解决方案1】:

这里的问题是你正在调用return。像这样的全局包含文件没有上下文可以返回,因此应用程序终止。您要做的只是分配变量。

if(USER_ID != 0)
{
   $template_vars = //FIRST VERSION OF ARRAY WITH FULL VALUES//
}
else 
{
   $template_vars = //SECOND VERSION OF ARRAY WITH ONLY => ""//
}   

【讨论】:

  • 感谢 Orangepill。这让它工作了。我的错误是认为您需要 return 以在内部发送结果(例如 echo,只是为了代码的利益而打印)。
猜你喜欢
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-10
  • 2021-05-17
  • 2018-07-06
  • 1970-01-01
相关资源
最近更新 更多