Php 多个Json字符串?

Php 多个Json字符串?,php,json,while-loop,Php,Json,While Loop,我试图获取多个数据字符串并将它们放入指定的div中 我正在构建一个“查看更多评论”功能,因此当有人单击“查看所有”时,它将替换显示的2条强制评论,如果有更多,则替换原来的两条,并添加该帖子上可能存在的更多评论 它不起作用,而且我知道服务器端的php脚本是问题所在,因为我检查了所有带有错误报告的ajax。我使用while循环根据comment_streamitem获取所有数据,在我的数据库中有四个结果。它得到了firebug中看到的这四个结果,但由于json_编码在循环中,我很确定这就是它不进入其

我试图获取多个数据字符串并将它们放入指定的div中

我正在构建一个“查看更多评论”功能,因此当有人单击“查看所有”时,它将替换显示的2条强制评论,如果有更多,则替换原来的两条,并添加该帖子上可能存在的更多评论

它不起作用,而且我知道服务器端的php脚本是问题所在,因为我检查了所有带有错误报告的ajax。我使用while循环根据comment_streamitem获取所有数据,在我的数据库中有四个结果。它得到了firebug中看到的这四个结果,但由于json_编码在循环中,我很确定这就是它不进入其div的原因。但当我将其放在div之外时,它只获取1个结果

我该怎么解决这个问题

if(isset($_GET['comment_streamitem'])){
$id=$id=mysqli_real_escape_string($mysqli,$_GET['comment_streamitem']);

$check = "select comment_id,comment_poster,comment_streamitem,comment_datetime,comment_content FROM streamdata_comments WHERE comment_streamitem='$id' order by comment_id";
$check1 = mysqli_query($mysqli,$check) or die(mysqli_error($mysqli));
    $json = array();
while($resultArr = mysqli_fetch_array($check1)){


$json[$resultArr['comment_id']]['comment_id'] = $resultArr['comment_id'];
$json[$resultArr['comment_poster']]['comment_poster'] = $resultArr['comment_poster'];
$json[$resultArr['comment_streamitem']]['comment_streamitem'] = $resultArr['comment_streamitem'];
$json[$resultArr['comment_datetime']]['comment_datetime'] = $resultArr['comment_datetime'];
$json[$resultArr['comment_content']]['comment_content'] = $resultArr['comment_content'];

$user=$resultArr['comment_poster'];
$check2= "SELECT * FROM user WHERE id='$user'";
$check22 = mysqli_query($mysqli,$check2);
$resultArr = mysqli_fetch_array($check22);
$json[$resultArr['username']]['username'] = $resultArr['username'];
$json[$resultArr['id']]['id'] = $resultArr['id'];
$json[$resultArr['first']]['first'] = $resultArr['first'];
$json[$resultArr['middle']]['middle'] = $resultArr['middle'];
$json[$resultArr['last']]['last'] = $resultArr['last'];


}
}
echo json_encode($json);
好了,我现在在firebug中得到了下面的回复,但是它在div中发布了1条评论,所有内容都没有定义。我也包括了ajax调用

    {
    "1687": {"comment_id": "1687"},
    "33": {"comment_poster": "33", "id": "33"},
    "223": {"comment_streamitem": "223"},
    "2014-08-23 17:24:10": {"comment_datetime": "2014-08-23 17:24:10"},
    "ggg": {"comment_content": "ggg"},
    "luce": {"username": "luce"},
    "lucy": {"first": "lucy"},
    "": {"middle": ""},
    "ward": {"last": "ward"},
    "1688": {"comment_id": "1688"},
    "2014-08-23 17:24:13": {"comment_datetime": "2014-08-23 17:24:13"},
    "hh": {"comment_content": "hh"},
    "1689": {"comment_id": "1689"},
    "2014-08-23 17:24:15": {"comment_datetime": "2014-08-23 17:24:15"},
    "kkk": {"comment_content": "kkk"},
    "1690": {"comment_id": "1690"},
    "2014-08-23 17:24:17": {"comment_datetime": "2014-08-23 17:24:17"},
    "kk": {"comment_content": "kk"}
}
Ajax脚本:

<script type="text/javascript">
$(function()
{
$(".view_comments").click(function()
{
var ID = $(this).attr("id");

$.ajax({
type: "GET",
url: 'viewmorecommentslink.php?comment_streamitem='+ ID,
dataType: 'json',
success: function(response){
$("#comment_list_"+ID).html('<div class="stream_comment" id="comment_'+response['comment_id']+'" style="margin-top:0px;">\
<table width=100%><tr><td valign=top width=30px><img class="stream_profileimage" style="border:none;padding:0px;display:inline;" border=\"0\" src=\"userimages/cropped'+response['comment_poster']+'.jpg\" onerror=this.src=\"userimages/no_profile_img.jpeg\" width=\"40\" height=\"40\" ></a><td valign=top align=left>\
<a href="/profile.php?username='+response['username']+'">'+response['first']+' '+ response['middle']+' '+response['last']+'</a> - <abbr class="timeago" title='+response['comment_datetime']+'>'+response['comment_datetime']+'</abbr>\<div class="commentholder">'+response['comment_content']+'</div><br/>\<div id="commentactivitycontainer">\
<a style="cursor:pointer;" onClick=\"deletecomment('+response['comment_id']+',comment_'+response['comment_id']+');\">Delete</a><a id="likecontext_'+response['comment_id']+'" style="cursor:pointer;" onClick=\"likestatuscomment('+response['comment_id']+',this.id);\">\
<div style="width:80px; position:relative; float:left; left:40px" id="likescommentprint'+response['comment_id']+'">Like</div></a><div style="width:80px; position:relative; float:left; left:40px" id="likescommentprint'+response['comment_id']+'"></div>\
</form><a id="dislikecontext_'+response['comment_id']+'" style="cursor:pointer;" onClick=\"dislikestatuscomment('+response['comment_id']+',this.id);\"><div style="width:90px; position:relative;top:-0px; float:left; left:200px" id="dislikescommentprint'+response['comment_id']+'">Dislike</div>\
</a><div style="width:90px; position:relative; top:-0px; float:left; left:200px" id="dislikescommentprint'+response['comment_id']+'"></div></form></div></table></div></div>');
$("#view"+ID).remove();

}   
});
return false
});
});
</script>

您正在覆盖循环中的结果:

$json['comment_id'] = $resultArr['comment_id'];
// etc.
应该是这样的:

$json[$resultArr['comment_id']]['comment_id'] = $resultArr['comment_id'];
      ^^^^^^^^^^^^^^^^^^^^^^^^ or you use a counter or something similar
// etc.

在sql查询中使用变量之前,还应该使用预先准备好的语句或转义变量。

这个简单的循环应该为您提供对象数组

对于要合并的用户数据,最好创建一个连接查询

在循环中运行SELECT查询可能代价高昂


实际上,在我保护我的$id=mysqli\u real\u escape\u string$mysqli,$\u GET['comment\u streamitem']之前,没有andrew;我喜欢确保我的脚本工作正常。谢谢你非建设性的回答,是吗$id=$\u GET['comment\u streamitem'];如果comment_streamitem='$id'ok,那么当您查看创建的json时,很快就会发现这些键没有任何意义。为什么要用这些数据作为关键?如果存在相同的数据-数据将覆盖自身,因为它使用相同的密钥。考虑一下您想要的数据结构,然后构建它。建议:您可能只想使用注释ID作为键,或者可能根本不使用任何键从索引0开始的简单json数组,注释ID位于该索引的数据内。dave您的json不正确,您真正需要的是一个objectsCan数组。请给我一个示例,说明您的意思以及您将如何执行此操作。我不知道。好的,我已经更新了,只做了很少的改动。我在firebug和ajax中更新了我的问题,如果你能看看jereon,它在做什么。感谢you@Dave如果像我使用的代码一样获得更多结果,则需要访问变量,如response[SOME_NUMBER][SOME_KEY]。最有可能的情况是,您会想要循环响应。我真的不知道如何做。我理解这个概念,因为这4个结果将相互重叠,因此它们都需要一个set键来分隔,但将代码放在一起并不容易。我们说话的时候我正在浏览网络。streamdata_comments中的comment_海报与用户表中的id链接。。然后它从该id中获取所有其他用户的数据。通过查看join查询,我可以看出它是错误的。用户表和streamdata_comments表是两个独立的表,您只需从streamdata_comments中选择所有内容,它就不会工作。还有你的内部将同一个表连接到它本身。很抱歉,我有一个语法错误,但我确实选择了所有字段,请现在重试
$sql="
    SELECT streamdata_comments.comment_id
          ,streamdata_comments.comment_poster
          ,streamdata_comments.comment_streamitem
          ,streamdata_comments.comment_datetime
          ,streamdata_comments.comment_content 
          ,user.username
          ,user.id
          ,user.first
          ,user.middle
          ,user.last
    FROM streamdata_comments 
    INNER JOIN user
    ON streamdata_comments.comment_poster=user.id
    WHERE streamdata_comments.comment_streamitem = $id
    ORDER BY streamdata_comments.comment_id
"
;



$result = mysqli_query($mysqli,$sql) or die(mysqli_error($mysqli));
$json = array();
while($row = mysqli_fetch_array($result)){
    array_push($json, $row);
}