2011-09-30 104 views
-4

我遇到了php代碼的簡單問題。PHP - 簡單的IF ... ELSE IF ...產生意想不到的結果,教育我嗎?

我正在使用2個產品定價等級。這些基於用戶是否已登錄,或者不是。

如果用戶沒有登錄,並且所述第一價格是空的;那麼價格就是price1。如果不是,則爲price1。

這工作完全正常。

如果用戶被登錄,並且所述第一價格是空的;那麼價格就是price1。如果不是,那就是price2。

這是它應該工作的方式,但實際發生的情況是這樣的:

如果用戶登錄,並率先降價是空的;那麼價格是。如果不是,那就是price2。

爲什麼我的代碼產生這種效果呢?

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

如果有人有任何建議可以幫助我解決此問題,將不勝感激。

謝謝!

@Pekka,它相當複雜。我只是想這樣的事情發生:

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字段爲空,則價格變量將價格1。如果沒有,那麼這將是價格2.

在另一方面,如果用戶沒有登錄,但price2字段爲空,那麼價格變量將被價格1。如果沒有,那麼這將是價格1

+5

這沒有意義:首先你要檢查一個用戶是否登錄,然後判斷用戶是否是*未登錄,然後是否用戶是*未登錄。用戶*已登錄,第一個和第三個塊將始終觸發。你最終想做什麼?'$ proPrice1'和'$ proPrice2'是從哪裏來的?這看起來有點亂,我在這種情況下做的是刪除所有內容並重新開始 –

+0

第一個嵌入式if語句塊看起來會產生相同的效果('empty()'或不)。 –

+0

userIsLoggedIn()也被調用兩次,這可能會產生意想不到的結果,順便說一句。 –

回答

1

您的代碼過於複雜,幷包含一些奇怪的結構。這是等效的,但是簡化版本,但檢查我的第一個else添加的註釋....

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; 
} 
+0

請在操作中查看我的編輯。這就是這樣,因爲沒有在我們的商店持有實物賬戶的人,只會看到現金價格。那些擁有賬戶的人可以登錄並能夠看到第二層定價。腥是的,但這是批發業的一部分。感謝您的輸入,會給代碼一個嘗試! –

+1

我很困惑 - 你如何區分未登錄的賬戶和非賬戶? Cookie或其他方式? – fvu

+0

正是如此,每月更新cookie。你會有更好的解決方案嗎? –

5

你解釋規則的方式有點混亂。您應該能夠修改以下代碼以適合:

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

我已經編輯我的操作,請看第一個實例的變化。我會稍微嘗試一下!謝謝! –

3

代碼與您所描述的算法相矛盾。

你告訴:

如果用戶沒有登錄,並率先降價是空的,那麼 價格價格1。如果不是,那就是price2。如果用戶登錄並且第一個價格爲空,則價格爲price1。如果不是,那就是price2。

所以,實際上,無論用戶是否登錄,算法都應該做同樣的事情。

在你的代碼,它也很奇怪:

你有三個條件:

  1. 用戶沒有
  2. 用戶登錄被記錄在
  3. 其他

用戶已登錄或未登錄。我沒有看到任何其他可能性。

而且也,下面幾行:

if (empty($prPrice2)) 
{ 
    $prPrice = $prPrice1; 
} 
else 
{ 
    $prPrice = $prPrice1; 
} 

可能因爲你正在做的兩個代碼塊相同的操作來降低到

$prPrice = $prPrice1; 

+0

謝謝你,我編輯了我的操作,首先是一個簡單的錯字。請看看它。 –

+1

您仍然在代碼中檢查price2是「用戶登錄」分支,而您的算法描述是關於檢查第一個價格。而在「用戶未登錄」分支中,您仍然有*,那麼價格就是price1。如果不是,則爲price1 *,這使得「空」測試完全不必要。 –

1
else 
{ 
    $prPrice = $prPrice1; 
} 

,因爲據我所知userIsLoggedIn是布爾不能達到這個條件,它可能只發生兩種情況:當userIsLoggedIn是真實的,當它假。 您寫道

如果用戶未登錄並且第一個價格爲空,則價格爲price1。如果不是,那就是price2。

但在你的代碼發生這種情況:

如果用戶沒有登錄和第二價格爲空,則價格價格1。如果不是,那也是price1太

在userIsLoggedIn你寫的

如果用戶登錄並率先降價是空

但在你的代碼檢查車況

此外,如果第二價格是空的。