2016-09-29 64 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现在有什么错误来检索结果。 –