【问题标题】:PHP IF statement not reacting how I think it should?PHP IF 语句没有反应我认为它应该如何?
【发布时间】:2011-10-01 18:23:16
【问题描述】:

我对下面的 php 语句有点麻烦:

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

以下是两种产品的示例:

product 1 -> price1 = 1.00
product 1 -> price2 = 0.00
product 2 -> price1 = 1.00
product 2 -> price2 = 0.80

如果用户没有登录我们的网站(userIsLoggedIn 函数),那么无论产品 price2 是否存在,他们都应该只能看到产品 price1。

另一方面,当用户登录我们的网站时。然后他们应该能够看到它存在的产品的 price2,或者他们只会看到 price1。

现在我的代码问题是这样的:

用户未登录,无论项目是否设置了 price2,他们都会看到 price1。

当用户登录后,他们会看到价格为 2 的商品的价格 2,但这是奇怪的部分,对于没有价格 2 的商品,它只是显示 0,其中它应该显示 price1。

是否有人对上述代码产生这种效果的原因有任何意见?

我可以根据要求提供与 userIsLoggedIn 函数相关的更多代码。

感谢任何愿意提供帮助的人!

【问题讨论】:

  • 我相信你的第二行可以缩短为$prPrice = $prPrice1;
  • $prPrice2 是如何设置的?
  • $prPrice = ($prPrice2 != 0 && userIsLoggedIn()) ? $prPrice2:$prPrice1。那应该更短。
  • 你能把剩下的代码贴出来吗?您是否还可以验证变量是否具有上述值,不仅在数据库中,而且在 php 脚本中?
  • 那么在 if 之前放置一个 price1 和 price2 的 var_dump 就足够了,以验证这些值是否符合您的预期,因为如果它们是您发布的代码应该可以正常工作。

标签: php if-statement


【解决方案1】:

您的代码对我来说看起来不错。您可以使用var_dump() 验证变量是否保持您期望的值。

您的代码也可能会像这样缩短。但是,如果您必须检查大量价格,则可能不建议在每次检查中执行 userIsLoggedIn(),而是将结果保存在变量中。

$prPrice = ($prPrice2 != 0 && userIsLoggedIn()) ? $prPrice2 : $prPrice1;

【讨论】:

  • 谢谢你,你是男人!无论如何,对于每次搜索执行 +- 50-100 次函数这一事实,您会提出什么更好的解决方案?
  • 把它放在遍历结果的循环之前。示例:$userIsLoggedIn = userIsLoggedIn(); 然后使用 $userIsLoggedIn 代替,因为它应该保持真或假,就好像每次都执行函数一样。
【解决方案2】:

代码正常工作 - 您的产品 1 的 price2 在调用 empty() 时不应返回 true,因为它的值为 0.00。也许您应该检查一个值是否为 0?

【讨论】:

  • 有超过 3000 种产品,所有的 price1 字段都进行了相应设置。用户未登录系统时显示,但用户登录时均显示为0,除非有price2不为空,则显示price2。你能想到这背后的任何其他原因吗?
  • 我认为您可能会混淆“空”的含义。如果列类型为数字格式的数据库中的值为null(即空),这不等于在 PHP 中调用empty() 返回true。我认为这就是为什么您的产品 1 price2 为 0.00,而您认为它为空的原因。
  • 数据库中的 price2 字段始终为 0.00 或高于此值的任何值。字段 price1 始终设置。我对你的暗示有点困惑:/
  • 好吧,好吧,你认为empty($prPrice2) 在检查什么?改用$prPrice2 == 0
猜你喜欢
  • 2017-12-04
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多