PHP-简单如果。。。否则如果。。。产生意想不到的结果,教育我?

PHP-简单如果。。。否则如果。。。产生意想不到的结果,教育我?,php,if-statement,Php,If Statement,我在使用简单的php代码时遇到了问题 我正在处理两个产品定价层。这些取决于用户是否已登录 如果用户未登录,且第一个价格为空;那么价格就是价格1。如果不是,那就是价格1 这个很好用 如果用户已登录,且第一个价格为空;那么价格就是价格1。如果不是,那就是价格 这是它应该工作的方式,但实际发生的是: 如果用户已登录,且第一个价格为空;那么价格是0。如果不是,那就是价格 为什么我的代码会产生这种效果 if (!userIsLoggedIn()) { if (empty($prPrice2))

我在使用简单的php代码时遇到了问题

我正在处理两个产品定价层。这些取决于用户是否已登录

如果用户未登录,且第一个价格为空;那么价格就是价格1。如果不是,那就是价格1

这个很好用

如果用户已登录,且第一个价格为空;那么价格就是价格1。如果不是,那就是价格

这是它应该工作的方式,但实际发生的是:

如果用户已登录,且第一个价格为空;那么价格是0。如果不是,那就是价格

为什么我的代码会产生这种效果

if (!userIsLoggedIn())
{
    if (empty($prPrice2))
    {
        $prPrice = $prPrice1;
    }
    else
    {
        $prPrice = $prPrice1;
    }
} else if (userIsLoggedIn())
{
    if (empty($prPrice2))
    {
        $prPrice = $prPrice1;
    }
    else
    {
        $prPrice = $prPrice2;
    }
} else 
{
    $prPrice = $prPrice1;
}
如果任何人有任何可以帮助我解决这个问题的建议,我们将不胜感激

谢谢大家!

@佩卡,这相当复杂。我只是希望这样:

product 1 -> price 1 = 1.00
product 1 -> price 2 = 0.00
product 2 -> price 1 = 1.00
product 2 -> price 2 = 0.80
如果用户已登录,但price2字段为空,则price变量将为price1。如果不是,那么价格是2


另一方面,如果用户未登录,但price2字段为空,则price变量将为price1。如果不是,则价格为1。

您的代码过于复杂,并且包含一些奇怪的构造。这是一个等效但简化的版本,但请检查我在第一个版本中添加的注释

if (!userIsLoggedIn())
{
    if (empty($prPrice2))
    {
        $prPrice = $prPrice1;
    }
    else
    {
        $prPrice = $prPrice1;  // this is highly suspicious...
    }
} else {    // user is logged or not, no need to recheck that boolean var
    if (empty($prPrice2))
    {
        $prPrice = $prPrice1;
    }
    else
    {
        $prPrice = $prPrice2;
    }
} 
用三元语句表达相同条件的一种稍微奇特的方式(示例相当于外部语句的else块,如果:

$prPrice = (empty($prPrice2)) ? $prPrice1 : $prPrice2;
编辑

假设有一种方法可以区分未登录的帐户持有人和没有帐户的用户,那么您需要在外部条件下处理这一问题,如下所示:

if ($UserHasAnAccount) {  
// but i don't understand (yet) how you'd know that at this point
    if (userIsLoggedIn()) {  // the price logic described before
        ....
    } else {
        ....
    }
} else {  // unknown user, price1
    $prPrice = $prPrice1;
}

您解释规则的方式有点混乱。您应该能够修改以下代码以适应:

if (userIsLoggedIn()) {
    $prPrice = !empty($prPrice2) ? $prPrice2 : $prPrice1;
} else {
    $prPrice = !empty($prPrice1) ? $prPrice1 : $prPrice2;
}

代码与您描述的算法相矛盾

你说过:

如果用户未登录且第一个价格为空,则 价格为价格1。如果没有,则为价格2。如果用户登录并且 第一个价格是空的,那么价格是price1。如果不是,则是price2

因此,实际上,无论用户是否登录,算法都应该做完全相同的事情

在您的代码中,这也很奇怪:

你有三个条件:

  • 用户未登录
  • 用户已登录
  • 其他
  • 用户已登录或未登录。我看不到任何其他可能性

    还有,下面几行:

    if (empty($prPrice2))
    {
        $prPrice = $prPrice1;
    }
    else
    {
        $prPrice = $prPrice1;
    }
    
    可以减少到

    $prPrice = $prPrice1;
    
    因为您在两个代码块中执行相同的操作

    else 
    {
        $prPrice = $prPrice1;
    }
    
    您无法达到此条件,因为据我所知,
    userIsLoggedIn
    是布尔值,它可能只发生两种情况:userIsLoggedIn为true和false。 是你写的

    如果用户未登录且第一个价格为空,则价格为price1。如果未登录,则价格为price2

    但在您的代码中,这种情况会发生:

    如果用户未登录且第二个价格为空,则价格为price1。如果未登录,则价格也为price1

    同样在你写的userIsLoggedIn条件下

    如果用户登录且第一个价格为空


    但是在您的代码中,检查第二个价格是否为空。

    这没有意义:首先检查用户是否已登录,然后检查用户是否未登录,然后检查用户是否未登录。因此,如果用户已登录,则始终会触发第一个和第三个块。最后您想做什么?您要做什么
    $proPrice1
    $proPrice2
    来自哪里?这看起来有点乱,在这种情况下,我要做的是删除所有内容,然后在第一个嵌入的
    块中重新开始,如果
    块以任何方式产生相同的效果(
    空()
    或不空)。userIsLoggedIn()也被调用了两次,可能会产生意想不到的结果,顺便说一句,@Pekka请参见编辑我的帖子…@Kevin谢谢,我没有想到这一点。但该函数的编码足够好,可以在这种情况下运行。谢谢,我编辑了我的op,一开始只是一个简单的打字错误。请查看。你还在你的日志中检查price2代码是“用户登录”分支,而您的算法描述是关于检查第一个价格的。在“用户未登录”分支中,您仍然有一个价格是price1。如果没有,则是price1,这使得“空”测试完全没有必要。我已经编辑了我的op,请查看第一个实例中的更改。我稍后会尝试一下!谢谢!请在op中查看我的编辑。它是这样的,因为在我们的商店中没有实体帐户的人只会看到现金价格。那些拥有帐户的人可以登录并能够看到第二个分层定价。可疑的是,但这是批发行业的一部分。感谢您的输入,我会尝试一下代码!我在这里感到困惑-如何区分未登录的帐户持有人和非帐户持有人?cookie或其他方式?正是这样,cookie每月更新一次。您有更好的解决方案吗?@blackberry好的,在这种情况下,如果cookie的存在反映在上面编辑中变量
    $UserHasAnAccount
    的状态中,那么代码应该做您想做的事情-关键是在2个级别中处理已知/未知和记录/未记录,而不是像您尝试的那样在1个级别中处理。UserIsLoggedIn是一个函数,它查询一个设置了一次的会话变量根据用户帐号、密码和帐户类型,用户凭据与mysql数据库匹配。