2012-05-02 24 views
0

我正在搜索頁面上,其中一個結果信息的位是位置。要搜索的內容之一是音樂專輯(沒有位置信息)。PHP如果語句被覆蓋

http://www.flcbranson.org/freedownloads-search.php

如果你搜索「石頭」,你會看到神的和平 - 鉑。 3 - 我的岩石與位置信息(這不是它應該的方式)。如果你搜索「我的搖滾」,你會注意到沒有爲同一個記錄列出位置信息(它應該是這樣)。這就像if語句被覆蓋,如果另一個結果確實有位置信息。

音樂專輯有Music01,Music02等的$row["Number"] ...所有其他記錄應該爲空或一個數字(應該都小於Musicxx)據我所知,此代碼應該只顯示位置如果它不是一個音樂專輯的信息。

<?php 
foreach ($stmt as $row) { 
    if ($row["Number"] < "Music01") { 
     if ($row["Location"]) $location = $row["Location"]; 
     else $location = "Faith Life Church"; 
     if ($row["City"]) $city = $row["City"]; 
     else if ($row["Sarasota"]) $city = "Sarasota"; 
     else $city = "Branson"; 
     if ($row["State"]) $state = $row["State"]; 
     else if ($row["Sarasota"]) $state = "FL"; 
     else $state = "MO"; 
    } 
    if ($location) { 
?> 
<li><?php echo $location; ?></li> 
<?php 
    } 
} 
?> 

我失去的東西,在這裏嗎?

JJ

+3

不要忽略條件中的「{花括號}」,這使得它們很難閱讀,很可能成爲您問題的根源。 – Dunhamzzz

+2

你似乎很奇怪,你試圖比較字符串,就像數字一樣。你如何期待它確定一個字符串「Music02」是否小於一個字符串「Music01」?你應該考慮比較實際的整數/數字等。 – thescientist

+0

使用其他比較。 'stripos'可能是一個合適的函數,用於檢查'$ row ['Number']中'Music'的出現' – Jrod

回答

0

問題是,您將字符串與小於<的字符串進行比較,每次都會返回true。你只需要在數組鍵中檢查單詞'Music`吧?

if (strpos($row["Number"], 'Music') !== false) { 

} 
+0

我使用'if($ row [「Number」] && $ row [「Number」] <「Music01」)'作爲頁面的另一部分,並且每次測試它時它都正常工作。我不知道有什麼區別。 – doubleJ

+0

我向你保證它沒有按照你的意圖工作:)我已經做了一些測試,並且用'<' or '>'比較任何字符串將始終返回true,除非其中一個值爲0,否則它將返回false。 – Dunhamzzz

1

你做錯了。首先初始化變量,然後根據需要覆蓋它們。這樣可以防止任何可能會丟失案件並且變量沒有被定義的問題。

$location = "Faith Life Church"; 
$city = "Sarasota"; 
/*...*/ 
foreach ($stmt as $row) { 
    foreach ($row as $variable => $value) { 
     $variable = strtolower($variable); //Location => location 
     $$variable = $value; //$location = $value 
    } 

} 

除此之外,你正在比較一個數字和一個字符串。從字符串中刪除數字,然後進行比較。