我有一个输入字段,它根据输入字段值的值过滤数据。我正在使用ajax调用来在运行时过滤数据。但问题是我使用多个查询和foreach循环来获取我想要的结果,就像我正在获取一个人的数据:姓名,电子邮件,电话,部门。一个人正在处理多个部门,因此我使用foreach循环来获取他的所有部门以及他的姓名,电子邮件和电话。
当我输出我的数据时,第一人称的详细信息正确,但在第二人称第二行部门栏中也显示第一人称部门和第三人部门显示第二人称部门等。我怎样才能展示一个人的正确细节?
这是我的代码:
<script>
$(document).ready(function() {
$("#cmp_name").keyup(function(){
$.ajax({
'url':"filter.php",
'data':{name:$("#cmp_name").val()},
'method':'GET',
'success':function(name){
//alert(data);
$("#datas").html(name);
}
})
});
});
</script>
<input type="text" placeholder="Name" name="cmp_name" id="cmp_name">
这是我的filter.php文件:
<?php
if(isset($_GET['name'])){
$name = $_GET['name'];
$dpt = "";
$ret = "";
$query = mysql_query("select id,name,phone,country_id,departments from persons where name like '%$name%'");
while($data = mysql_fetch_assoc($query)){
$name = $data['name'];
$phone = $data['phone'];
$country_id = $data['country_id'];
$queryr= mysql_query("select country from countries where country_id = $country_id'");
$$country = mysql_fetch_array($queryr);
$country_name = $country['country'];
$depart = $data['departments'];
$department=explode(",",$depart);
foreach($department as $departments){
$depart_fetch = mysql_query("select department_name from departments where id='$departments'");
$fetch1 = mysql_fetch_array($depart_fetch);
$depart_list = $fetch1['description'];
$dpt=$dpt."<div> ".$depart_list." </div>";
}
$ret=$ret."<tr><td> ".$name." </td><td> ".$phone." </td><td> ".$country_name." </td><td> ".$dpt."</td></tr>";
}
echo $ret;
}
?>
答案 0 :(得分:0)
这一行似乎错了:$dpt=$dpt."<div> ".$cns." </div>";
。
我不知道$cns
来自哪里。我认为它应该是:$dpt="<div> ".$depart_list." </div>";
这消除了$dpt
。
答案 1 :(得分:0)
您需要在$dpt = "";
之前写下foreach($department as $departments){
。否则,它会继续在每个循环中添加到列表中,而不是为每个人创建一个新列表。
这将解决您的直接问题,但是您还应该强烈注意我上面提到的关于您的过时数据访问方法和数据库设计损坏的评论,并且在放置您的代码之前,我们的目标是在不久的将来修复这些问题。投入生产使用。