2016-10-22 111 views
0

調用此腳本的頁面允許用戶從1到5個字段中選擇。這個想法是將所選字段的數量相加並獲取適當的結果。無論從表單中選擇多少個字段,if/elseif語句都不起作用,我看不到問題。 任何幫助將不勝感激。php if/elseif不工作

$sql = "SELECT * FROM my_table"; 
$result = $conn->query($sql); 
$fields_select = 0; 
if($country_type != "") { 
    $fields_select = $fields_select + 1; 
    $winearr[] = "\$country_type"; 
    $winearr[] = "Country"; 
} 
if($region_type != "") { 
    $fields_select = $fields_select + 1; 
    $winearr[] = "\$region_type"; 
    $winearr[] = "Region"; 
} 
if($wine_type != "") { 
    $fields_select = $fields_select + 1; 
    $winearr[] = "\$wine_type"; 
    $winearr[] = "Type"; 
} 
if($rating_type != "") { 
    $fields_select = $fields_select + 1; 
    $winearr[] = "\$rating_type"; 
    $winearr[] = "Rating"; 
} 
if($vintage_type != "") { 
    $fields_select = $fields_select + 1; 
    $winearr[] = "\$vintage_type"; 
    $winearr[] = "Vintage"; 
} 
if ($result->num_rows > 0) { 
    if ($fields_select == 0) { 
    echo "No Results Found In Search"; 
    } elseif ($fields_select == 1) { 
    while($row = $result->fetch_assoc()) { 
     if($winearr[0] == $row[$winearr[1]]) { 
     makeListing($row); // call the function 
     } 
    } 
    } elseif ($fields_select == 2) { 
    while($row = $result->fetch_assoc()) { 
     if($winearr[0] == $row[$winearr[1]] && $winearr[2] == $row[$winearr[3]]) { 
     makeListing($row); // call the function 
     } 
    } 
    } elseif ($fields_select == 3) { 
    while($row = $result->fetch_assoc()) { 
     if($winearr[0] == $row[$winearr[1]] && $winearr[2] == $row[$winearr[3]] && $winearr[4] == $row[$winearr[5]]) { 
     makeListing($row); // call the function 
     } 
    } 
    } elseif ($fields_select == 4) { 
    while($row = $result->fetch_assoc()) { 
     if($winearr[0] == $row[$winearr[1]] && $winearr[2] == $row[$winearr[3]] && $winearr[4] == $row[$winearr[5]] && $winearr[6] == $row[$winearr[7]]) { 
     makeListing($row); // call the function 
     } 
    } 
    } elseif ($fields_select == 5) { 
    while($row = $result->fetch_assoc()) { 
     if($winearr[0] == $row[$winearr[1]] && $winearr[2] == $row[$winearr[3]] && $winearr[4] == $row[$winearr[5]] && $winearr[6] == $row[$winearr[7]] && $winearr[8] == $row[$winearr[9]]) { 
     makeListing($row); // call the function 
     } 
    } 
    } 
} 
/* Debug */ 
echo $winearr[0]."-".$winearr[1]."-".$winearr[2]."-".$winearr[3]."-".$winearr[4]."-".$winearr[5]."-".$winearr[6]."-".$winearr[7]."-".$winearr[8]."-".$winearr[9]; 
echo "<br>\$fields_select=".$fields_select; 
+0

你有沒有做任何調試? '$ fields_select'的價值是什麼? –

回答

0

從你的代碼我扣板你試圖搜索一些不正確的PHP。嘗試通過查詢進行搜索,並讓數據庫處理搜索。

$sql = "SELECT * FROM my_table WHERE "; 

if($country_type != "") { 
    $sql .= 'Country = "' . $country_type .'"'; 
} 
if($region_type != "") { 
    $sql .= 'AND Region = "' . $region_type .'"'; 
} 
. 
. 
. 
$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
    while($row = $result->fetch_assoc()) { 
      makeListing($row); // call the function 
    } 
} 

最終獲取您的結果。

+0

感謝您的回覆Saeed Am。參觀者需要通過各種不同的標準來查找葡萄酒。我只能用一個簡單的語句訪問。這個數據庫需要一個更復雜的搜索方式。 –

+0

我不理解你說「我只能用一個簡單的語句訪問。」但如果您有權訪問數據庫以避免任何複雜性,則可以在多個列上使用'FULL TEXT INDEX',然後使用'MATCH()... AGAINST'語句。我假設你使用MySQL。 –

+0

另一件事,我不知道你用這個'$ winearr [] =「\ $ country_type」來做什麼?'''你可以簡單地這樣做'$ winearr [] = $ country_type' –

0

已解決 - 問題是編碼不正確。 $ winearr [] =「\ $ country_type」;返回$ country_type而不是所選的變量。不是$ country_type等於澳大利亞,每次無論選擇什麼,每次都是$ country_type。

$winearr[] = "\$rating_type"; 

應該已經

$winearr[] = $rating_type; 

,因爲它應該現在,程序工作的。