【问题标题】:How to store a permanent boolean flag?如何存储永久布尔标志?
【发布时间】:2014-03-14 17:32:29
【问题描述】:

我创建了一个具有 2 个控制面板的网络应用程序。一份给管理员,一份给用户。我希望用户只有在管理员将其设置为“开启”(从他的面板)时才能够从他们的面板执行一项特定操作,而当他将其设置为“关闭”时无法执行。

我的应用也使用了 MySql 数据库。

我该如何实现它?只有一个字段的额外表格是可行的解决方案吗?我可以通过读取文件(可能是 JSON)来做到这一点吗?

编辑:我希望管理员能够通过单击按钮来切换“开/关”状态,因此常量不是解决方案。

【问题讨论】:

  • 是的。答案是肯定的。
  • 你想让一个标志影响所有用户吗?
  • 是数据库还是是 json 或其他文件?另外,我想要最“正确”和最有效的解决方案,而不仅仅是一个有效的解决方案。在我看来,额外的桌子并不是一个好的解决方案。如果我错了,请纠正我
  • @hindmost 是的。我想在每次执行特定操作之前检查它是否“开启”。
  • 您可以在数据库中设置它并查询每个页面加载,或者您可以有一个配置文件,将其作为 PHP 常量加载:php.net/manual/en/language.constants.php,它将在您的脚本中的任何地方都可用并且不需要查询。

标签: php mysql boolean


【解决方案1】:

每次使用操作时都可以使用数据库查询,但如果它更通用并且您将经常使用它,我会研究 PHP 常量。您可以将其设置在配置文件中,例如:

Config.php

define('USER_CAN_MODIFY', true);

Other.php

if ((defined('USER_CAN_MODIFY') and USER_CAN_MODIFY === true) { }

常量具有全局范围,一旦设置就不能更改。

【讨论】:

  • 但是如何通过单击按钮来更改它(直到再次按下它)?如果我在我的应用程序的每个控制器中包含的 Config.php 中有 define(),那么每次脚本加载时它都是真的!这意味着只能手动?
  • 一个常量不能动态改变所以这不是一个解决方案:(
  • 那么您必须在脚本的开头动态定义它。它在您的配置文件中不必是静态的,这只是一个示例,但一旦在脚本中设置,就无法修改。实际上,您永远不需要在设置后更改这样的设置,您只需要从查询中定义它。您可以解决此问题的方法是运行数据库查询或从 config.php 中保存的 INI 文件加载参数。我只是给你一个静态示例,它可以避免每次加载页面时额外的数据库查询。
【解决方案2】:

由于您要存储单个值,因此不需要使用 DB。您可以简单地将这个标志作为序列化值存储在文件中。 以下是简化示例。

define('PERM_FLAG_FILE', 'perm_flag.dat');
$PERM_FLAG = false;

function loadFlag() {
    global $PERM_FLAG;
    return file_exists(PERM_FLAG_FILE)? unserialize(file_get_contents($PERM_FLAG)) : false;
}

function saveFlag() {
    global $PERM_FLAG;
    file_put_contents(PERM_FLAG_FILE, serialize($PERM_FLAG));
}

function setFlag($v) {
    global $PERM_FLAG;
    $PERM_FLAG = (bool)$v;
}

【讨论】:

  • 我终于用 JSON 文件做到了。我认为也不需要像你的例子那样定义一个常量。
  • @Antonis Grigoriadis 正如我所写,这是一个简化的示例,不应将其视为现成的解决方案。但是,如果对您有帮助,您可以投票赞成我的回答。
猜你喜欢
  • 2015-08-24
  • 1970-01-01
  • 2021-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
  • 2013-03-31
  • 2015-09-03
相关资源
最近更新 更多