2016-10-22 67 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; 

,因为它应该现在,程序工作的。