2011-06-29 98 views
2

我正在使用對PHP文件的Ajax調用來從MySQL數據庫獲取數據,並在HTML中填充選擇選項。問題是選項中的重複項目,我不知道爲什麼。我在工作臺中試過了這個查詢,它帶回了我需要的東西。爲什麼我從MySQL查詢中獲取重複的項目?

PHP文件:

<?php 
    $q=$_GET["q"]; 

    // open db connection code 

    $query = "select * from r2rtool.materialtype where type = 'FE' and tools like '%".$q."%'"; 
    $result = mysql_query($query); 

    $option = ""; 

    while($row = mysql_fetch_array($result)) 
    { 
     $mat = $row["Material"]; 
     $option.="<option value=\"$mat\">".$mat."</option>"; 

     echo $option; 
    } 

    // close db connection 
?> 

的Ajax功能:

function populatematerial(str) 
{ 
    if (str=="") { 
     document.getElementById("txtHint").innerHTML=""; 
     return; 
    } 

    if (window.XMLHttpRequest) { 
     // IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
    } 

    else{ 
     // IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
     document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 
     } 
    } 

    xmlhttp.open("GET","phpfile.php?q="+str,true); 
    xmlhttp.send(); 
} 

回答

6
while($row = mysql_fetch_assoc($result)) 
{ 
    $option .= "<option value=\"{$row[Material]}\">{$row[Material]}</option>"; 
} 
echo $option; 
+0

換句話說,在完成檢索/構建數據後執行輸出。您的版本正在建設,輸出,增加一點,再次輸出等... –

+0

它不完全重複,你得到像1 12 123 1234 12345 ... –

+0

我愛你。工作完美。 :-D – TheRealDK

1

所有你需要做的就是將echo $option;搬出while循環,就像這樣:

while($row = mysql_fetch_array($result)) 
{ 
    $mat = $row["Material"]; 
    $option.="<option value=\"$mat\">".$mat."</option>"; 
} 
echo $option; 

你應該輸出H TML之後,而不是當你建立它。

0

使用mysql_fetch_assoc代替mysql_fetch_array因爲陣列中的數字和名稱都格式返回值,所以它會兩次數據,

其中mysql_fetch_assoc返回數組作爲陣列的唯一名稱元件..

更多理解 嘗試

<?php 
$query = mysql_query("some query "); 
$row = mysql_fetch_array($row); 
$assoc = mysql_fetch_array($row); 
print_r ($row); 
echo "<br>"; 
print_r ($assoc); 
echo "<br>"; 
?> 
相關問題