一次获取数据并放入两个不同的 div

Posted

技术标签:

【中文标题】一次获取数据并放入两个不同的 div【英文标题】:Fetching data at once and put in two different div 【发布时间】:2018-04-24 08:06:21 【问题描述】:

我一直在尝试获取两个用户之间的聊天消息,并希望将它们放在两个不同的 divs 中并分别设置两个 div 的样式。我现在正在做的是获取聊天并将其放入单个 div“消息”中,但我想获取数据并将其放入“消息”div 中的两个 div 中。

function fetch_chat() 
    // to fetch the chats between two users
    $.ajax(
        url: "fetch_chat.php",
        method: "POST",
        data: 
            id: currentID
        ,
        dataType: "text",
        success: function(data) 
            $("#messages").show();
            $('#messages').html(data);
            $("div.area").show();
            //chatTimer = setTimeout(fetch_chat, 500); //request the chat again in 2 seconds time
            if (!scrolled) 
                $("#messages").animate( scrollTop: $(document).height() , "fast");
                scrolled = true;
            
        
    );
   

<?php
require("config.php");
$id = $_POST['id'];
$sql = "select * from users where id='$id'";
$res = mysqli_query($con, $sql);
$row = mysqli_fetch_array($res);
$user_to = $row['name'];
$sql1 = "select * from chats where user_from='$_SESSION[name]' AND user_to='$user_to' OR user_to='$_SESSION[name]' AND user_from='$user_to' order by id";
$res1 = mysqli_query($con, $sql1);
if (mysqli_num_rows($res1) > 0) 
    while ($row = mysqli_fetch_array($res1)) 
        echo $row['msg'];
    
 else
    echo "No msgs <br />";
?>

【问题讨论】:

【参考方案1】:

从数据库中获取数据时,如果消息来自用户,则给它一个类,否则给它一个不同的类。然后在显示聊天结果的 html 文件中,定义这些类样式。将这些样式包含在您拥有函数 fetch_chat() 的文件中,

        <style>
        .mine 
            background-color: lightblue;
        

        .notMine 
            background-color: lightyellow;
        

    </style>

而 php 会是

    <?php

    require("config.php");
    $id= $_POST['id'];
    $sql="select * from users where id='$id'";
    $res=mysqli_query($con,$sql);
    $row=mysqli_fetch_array($res);
    $user_to= $row['name'];
        $sql1="select * from chats where user_from='$_SESSION[name]' AND user_to='$user_to' OR user_to='$_SESSION[name]' AND user_from='$user_to' order by id";
        $res1=mysqli_query($con,$sql1);
            if(mysqli_num_rows($res1)>0)
                while($row=mysqli_fetch_array($res1))
                    if($row["user_from"] === $_SESSION["name"] ) 
                        echo "<div class='mine'> $row[msg] </div>\n";
                    
                    else 
                        echo "<div class='notMine'> $row[msg] </div>\n";
                    
                    //echo $row['msg'];
                
            
        else 
            echo "No msgs <br />";     
        
    ?>

【讨论】:

但是 session[name] 是当前登录的用户的名称。所以 if(userfrom == session(name) 将始终为真。我之前尝试过并得到了相同颜色的整条消息 我们正在检查每一行 - 此行消息是由用户发送还是由用户接收。 - if($row["user_from"] === $_SESSION["name"] ) - 所以如果这个特定的消息是由用户发送的,那么它会有不同的背景。 嗯我想我有点困惑......在我的插入查询中,我在发送消息时插入了会话(名称)。这就是为什么 if 语句在我的情况下总是正确的。你能建议我如何插入发送它的用户的名称或 ID... 插入聊天 (userfrom, user to, msg) 值 ($_session[name], $user to, $msg) ;这是有人发送消息时我的插入查询。 我认为查询没问题。您正在获取两种类型的记录,其中 'from' 是这个用户,而 'to' 是这个用户。所以我想它应该可以工作。

以上是关于一次获取数据并放入两个不同的 div的主要内容,如果未能解决你的问题,请参考以下文章

将Sqlite数据放入两个不同Fragment内的两个ListView

核心数据获取请求不返回不同的结果

试图将两个 json 数据放入 python 列表但收到错误消息

如何组合两个查询并将数据放入一行?

从数据库中获取数据并放入 GUI 中的表中

Android:使用 Retrofit 获取不同的对象列表数据