【问题标题】:Loads of if's, is it okay?一堆if,可以吗?
【发布时间】:2011-05-25 19:58:37
【问题描述】:

我有一个登录表单,并且我设计了我的网站,让每个用户都有自己的仪表板。

登录后,我检查是否

if($_POST['username']=="ryan")
{
redirect to ryan;s dashboard
}
if($_POST['username']=="jpn")
{
redirect to jpn;s dashboard
}

等等 1500 个用户名。还好吗?

【问题讨论】:

  • 如果您想在每次获得新用户时给自己大量额外的工作,这很好。这些仪表板的名称是什么,它们是否与用户的名称相关,或者您是否有仪表板的用户名查找表?
  • 与用户名有关。
  • 当然可以。请记住,每次有新用户在您的应用上注册时,您都必须添加代码...鉴于您最好使用 redirect_to($_POST['username']); 之类的内容并具有
  • 以什么方式相关?您是在检查用户名是否有效,还是只是让用户在字段中输入他们想要的任何内容,以便 ryan 在输入 jpn 而不是自己的名字时可以看到 jpn 的仪表板?

标签: php html dashboard


【解决方案1】:

将名称和仪表板 URL 放入数据库中。进行一次查询以根据发布的名称查找 URL 并重定向。您将有 4 行代码,而不是 6000 行。

【讨论】:

  • 嘿,这是个好主意。在我运行查询并检查用户并从数据库获取链接后,我如何重定向用户?我应该使用PHP的header函数吗?
  • 您可以这样做,但我的回答更安全,因为您也需要密码。您也只有一次仪表板代码(在一个文件中),但只加载用户数据。您可以调整会话长度以满足您的需要 - 认为默认值是用户注销前 15 或 20 分钟。我的意思是使用 Dans 的方式,如果一个用户知道另一个用户名,他们可以很容易地访问另一个用户的仪表板。
  • 刚刚对这个主题有了另一个想法......首先,所有仪表板共有的代码必须复制 1500 次(假设它们完全是不同的页面)并且必须复制常见的更改1500 次......其次,如果仪表板 URL“模式”发生变化会发生什么。例如 /dashboard/name.htm 到 /dash/name.htm?这是许多更改中的一个,无法通过数据库中的简单查找/替换来完成。当它可能只是 1 个 URL 适合所有人时,那将是不必要的工作,如果 URL 发生变化,则进行一次更改。
  • 与我的相比,为什么这个答案有这么多的赞成票?是否有一些其他人可以看到但我看不到的文字?是不是说 4 行而不是 6000 行?我会改变我的,所以它说这样的话,但我不能指定一个确切的数字。虽然它会节省超过 5996 行代码......
  • 因为是先写的,问题作者先评论的,而且很简单。
【解决方案2】:

没有。如果你真的需要在 1500 种不同的例程之间进行选择,你应该使用类似 strategy pattern 的东西。

但是,在您的情况下,这只是具有不同数据的相同例程(加载用户的仪表板)。程序应该是一样的。为什么你需要不同的代码来加载每个用户的仪表板?

【讨论】:

    【解决方案3】:

    认为这是你的设计中的问题......这样的事情不应该发生:)

    您应该使用一个脚本来获取用户仪表板,并且只将用户 ID 发送到该脚本!

    【讨论】:

    • 认为这不是一个正确的答案。
    • 这比其他人试图让代码适应有缺陷的架构更有意义
    【解决方案4】:

    首先,与其这样执行多个if 语句,我建议使用switch 语句,如下所示:

    switch($_POST['username'])
    {
       case "ryan" : //redirect to ryan;s dashboard
       case "jpn" : //redirect to jpn;s dashboard
    }
    

    其次,我不建议这样做重定向到某人的仪表板。您应该有一个通用仪表板和一个包含用户名和仪表板详细信息的表格。然后使用用户名调用单个函数。

    【讨论】:

      【解决方案5】:

      您应该重定向到 1 个仪表板。然后在仪表板中使用此值

      login php ....
      if($_POST['username'])
      {
      redirect to dashboard
      }
      
      
      dahsboard php 
      
      welcome <?=$_POST['username']?>,
      ...
      ..
      user spesific things..
      

      如果你为 1000 个用户尝试你的代码,你会很累..

      【讨论】:

        【解决方案6】:

        您可以将用户名保存在会话变量中,然后根据会话变量加载用户仪表板。假设您也请求密码,您应该保存用户名和密码。检查它们是否正确并为该特定用户加载仪表板。

        如果他们被重定向到例如 www.your-domain.com/jpn.html,这是不安全的,因为 a) 它可以被搜索引擎索引并出现在搜索结果中,b) 更重要的是所有用户都可以只需输入用户 URL 即可访问彼此的仪表板。

        【讨论】:

        • 好主意。我已经将用户名和密码存储在会话变量中。我如何基于此重定向?
        • 您只需重定向到 www.your-domain.com/dashboard.php 并根据存储在 $_SESSION["username"]$_SESSION["password"] 中的值加载用户数据。我不确定用户名和密码对于这些变量名是否安全,因为我自己不是 PHP 专家,但您可能希望将它们命名为黑客无法预测的名称。
        • 如何使不同用户的数据不同?抱歉问了这么愚蠢的问题
        • 不管它们有什么共同点,你都可以放在仪表板页面中——比如布局。例如,如果他们有积分,那么您可以通过用户名将其存储在数据库中,并引用他们输入的用户名旁边的积分。因此,您在 users 表(在数据库中)中获取包含用户名的行,并输出存储在该行的 points 列中的值。您并没有真正概述这个项目,所以点只是一个示例,但您可以将其替换为您想要的任何内容。
        • 关于问一个愚蠢的问题,我们都去过一次——不管我们多么否认!过去我自己也问过我的公平份额!想想我只问了一个非常愚蠢的问题,但有几个有点愚蠢的问题。
        猜你喜欢
        • 1970-01-01
        • 2019-05-09
        • 2017-09-01
        • 2017-02-06
        • 1970-01-01
        • 2019-11-27
        • 2014-10-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多