2016-09-29 67 views
0

我一直在試圖弄清楚如何將搜索結果加載到表中,但不管我做什麼,我只得到一個結果,而不是數據庫中表中的2(樣本大小)行。PHP-JQuery-Ajax:如何使用mysql查詢結果(json編碼數組)的所有結果填充表

這是MySQL代碼:

if (isset($_POST['search_value'])) { 
$search_value = mysqli_real_escape_string($conn, $_POST['search_value']); 

$sql = "SELECT 
     record_id, 
     personal_id, 
     name, 
     status, 
     entry_date 
     FROM sample_db 
     WHERE EmpID = '".$search_value."'"; 

$res = mysqli_query($conn, $sql) or die("Error: ".mysqli_error($conn)); 

$data = array(); 
while($row = mysqli_fetch_array($res)){ 
$data = array(
     'tb_record_id' => $row['record_id'], 
     'tb_personal_id' => $row['personal_id'], 
     'tb_name' => $row['name'], 
     'tb_status' => $row['status'], 
     'tb_entry_date' => $row['entry_date'], 
     ); 
     } 
     echo json_encode($data); 

} 

我讀過幾個例子,其中陣列被構建爲$數據[] =陣列(數據放在這裏),而不是$數據=陣列(數據去這裏),但每當我嘗試$ data []時,它都不會返回任何內容,但控制檯日誌會顯示數組中的所有結果。

另外,使用dataType:'json'似乎也不工作。

我迄今試過的唯一方法是給每個<td>一個ID。

Ajax代碼

$.ajax({ 
     type : 'POST', 
     url : 'search_fetch.php', 
     data : data, 
     cache: false, 
     success : function(response) 
       { 
       result = jQuery.parseJSON(response);       

       $("#list_p_id").append(result.tb_personal_id); 
       $("#list_name").append(result.tb_name); 
       $("#list_status").append(result.tb_status);          
       $("#list_date").append(result.tb_entry_date); 
    } 
}); 

我怎麼能填充所有可用的結果表?

此外,如果有幫助,我打開不使用數組。我只是不知道如何將查詢結果發送到ajax響應的另一種方式。

+0

您必須使用'$ data [] = array ...'來獲取所有結果。現在你用每一個新的結果覆蓋'$ data'。 並將輸出('echo jeson_encode($ data)')移到while循環之外。 – Jeff

+0

然後,在js中:您不需要parseJson,我認爲已經由jQuery完成了。然後使用'result [0] .tb_personal_id'來獲取你的數據。 – Jeff

+0

你的腳本存在[SQL注入攻擊]的風險(http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) 看看發生了什麼[ Little Bobby Tables](http://bobby-tables.com/)即使 [如果你正在逃避輸入,它不安全!](http:// stackoverflow。com/questions/5741187/sql -injection-that-around-mysql-real-escape-string) 使用[prepared parameterized statements](http://php.net/manual/en/mysqli.quickstart.prepared- statement.php) – RiggsFolly

回答

2

在你的while循環中,你需要以每次不覆蓋整個數組的方式將每行結果推送到你的數組中。

例如:

while($row = mysqli_fetch_array($res)) 
{ 
    array_push($data, array(
     'tb_record_id' => $row['record_id'], 
     'tb_personal_id' => $row['personal_id'], 
     'tb_name' => $row['name'], 
     'tb_status' => $row['status'], 
     'tb_entry_date' => $row['entry_date'], 
     ) 
    ); 
} 

執行此操作時,請記住,$數據現在是一個數組的數組,你將需要相應地訪問你的Ajax的項目。

附加信息來回答你的問題:

我不知道您還需要了解如何在表格中顯示結果數據信息......

您將需要使用某種的動態代碼來生成您的HTML,以便爲每個表單元格分配一個唯一的ID。

當你這樣做的時候,你需要在你的ajax代碼中使用一個循環,這樣你才能將結果數據分配給每個表格單元格並顯示它。

目前,您的循環會將數據重寫到現有元素中,意味着您只能獲得一行信息。

+0

我得到了與傑夫的建議相同的結果。您的建議確實會獲取所有記錄(在控制檯日誌中可以看到),但是沒有任何內容被傳遞給表格。另外,第一個);不應該有; (它給了我一個意想不到的錯誤,所以我不得不刪除它)。 – BlueSun3k1

+0

我將編輯代碼以刪除那個,很好的抓到:) –

+0

也許你可以將json響應粘貼到你的例子中,這樣我們可以看到它?你的ajax現在有什麼錯誤來檢索結果。 –