2015-10-15 107 views
-1

我有我的數據庫中的一些數據:PHP MySQL的:用PHP陣列匹配MySQL查詢導致

id_tag | tag 
------------ 
1  | Dog 
2  | Cat 
3  | Buldog 
4  | Persian Cat 

然後我有一個參數:

$tag = "2, 4"; 

我想告訴所有的標籤爲複選框。如果id_tag等於$ tag參數。 我有一個試驗:

echo "<div class='btn-group' data-toggle='buttons'>"; 
$thetag = explode(", ", $tag); 
$tagall = mysql_query("SELECT * FROM tags"); 
if(mysql_num_rows($tagall) > 0) 
{ 
    while($tagt = mysql_fetch_array($tagall)) 
    { 
     foreach($thetag as $ttg) 
     { 
      if($tagt['id_tags'] == $ttg) 
      { 
       $aktiv = "active"; 
       $ceked = "checked"; 
      } 
      else 
      { 
       $aktiv = ""; 
       $ceked = ""; 
      } 
     } 
     echo "<label class='btn btn-primary {$aktiv}'><input type='checkbox' value='{$tagt['id_tags']}' autocomplete='off' {$ceked}> {$tagt['tag']}</label>"; 
    } 
} 
echo "</div>"; 

結果是:

Dog | Cat | Buldog | Persian Cat 

與波斯貓活躍和檢查。

我需要的結果是貓和波斯貓活躍和檢查。請幫幫我...!

+0

使用檢查=「檢查」 –

+0

爲什麼你有波斯貓和貓爲兩大類?貓應該食用波斯貓。我想你可以在標籤標籤中尋找'貓',如果有匹配,然後將其設爲檢查 –

+0

波斯是子類別 – auastyle

回答

0

當然是這樣,因爲你在這裏做的是在主循環內毫無意義地循環通過$tag,每次你重寫先前存儲的信息,所以只使用最後一個。

這裏是解決方案之一:

while($tagt = mysql_fetch_array($tagall)) 
    { 
     if(in_array($tagt['id_tag'], $thetag)) 
      { 
       $aktiv = "active"; 
       $ceked = "checked"; 
      } 
      else 
      { 
       $aktiv = ""; 
       $ceked = ""; 
      } 
     echo "<label class='btn btn-primary {$aktiv}'><input type='checkbox' value='{$tagt['id_tag']}' autocomplete='off' {$ceked}> {$tagt['tag']}</label>"; 
    } 

另外,請consider avoiding mysql_* functions

+0

woow ...我沒想象in_array。我只是關注這個foreach。多謝你們。你太棒了。 – auastyle

0

問題是您的foreach ($thetag as $ttg)循環在找到匹配項後仍然保持循環。如果下一次迭代不匹配,它會將$aktiv$ceked設置回空字符串。這些變量的最終值僅基於$tagt['id_tags']是否匹配$thetag的最後一個元素,而不是匹配它們中的任何一個。在設置$ceked = "checked";後,您可以通過輸入break來解決此問題。

但更簡單的方法是:

if (in_array($tagt['id_tags'], $thetag)) { 
    $aktiv = "active"; 
    $ceked = "checked"; 
} else { 
    $aktiv = ""; 
    $ceked = "checked"; 
} 
+0

與fiedlr答案相同。你們兩個很棒。謝謝... – auastyle