我循环中的数据不匹配,不确定为什么

时间:2019-06-21 05:14:03

标签: php mysql loops if-statement

我有一个代码,假设该代码可以在用户之间来回显示消息。由于某种原因,数据不匹配,并且我不确定代码中的哪个位置有错误。我试图更改$x < $sender的if语句,但这没有用。

1

但是显示的数据与数据库信息不一致。

2

“测试2”消息是从woof3发送的,因此当以woof登录时,它应该是绿色而不是蓝色。而且“测试再次”是从woof发送的,因此以woof登录时应该为蓝色

在下面编辑工作代码,没有pdo,因为我还没有完成这个项目,所以我将它们保存下来以简化测试。

<?php

include "../Site/db.php";

$url = $_SERVER['REQUEST_URI'];
$urlArray = explode('=', $url);
$Username = $urlArray[sizeof($urlArray) - 1];

$Myself = $_SESSION['username'];

$sql = "SELECT * FROM messages ORDER BY `Id` ASC";
$result = $conn->query($sql);

// Header of message box
echo '<div id="messages" class="messagePersonBox shadow">
        <span class="usersname" name="receiver"><a href="Account?='.$Username.'">'.$Username.'</a></span>
<hr style="margin-top:24px">
<div id="allMessages"class="allMessages">
';

// $sql2 = "SELECT * FROM messages WHERE Sender = '$Myself' ORDER BY `Id` ASC";
// $result2 = $conn->query($sql2);

$sql3 = "SELECT *  FROM messages 
        WHERE (Sender = '$Myself' AND Receiver = '$Username')
           OR (Receiver = '$Myself' AND Sender = '$Username') ORDER BY `MessageTime` ASC";


$result3 = $conn->query($sql3);
print_r($result3);
$x = 0;

$sql4 = "SELECT * FROM messages WHERE Sender = '$Myself'";
$result4 = $conn->query($sql4);

$sql5 = "SELECT * FROM messages WHERE Receiver = '$Myself'";
$result5 = $conn->query($sql5);

$totalSender = mysqli_num_rows($result4);
$totalReceiver = mysqli_num_rows($result5);

// might have to add both totals for while loop
// to get total messages
$totalmessages = mysqli_num_rows($result);

// For receiving
while ($x < $totalmessages) {

    // output data of each row

     if ($result3->num_rows > 0) {
         if ($row = $result3->fetch_assoc()) {
             $Sender = $row['Sender'];
             $Message = $row['Message'];
             $Receiver = $row['Receiver'];
             $TimeSent = $row['MessageTime'];
         }
     }
       $class = $Sender == $Myself ? 'messageDisplay' : 'messageDisplay2';


     // sending a message

         echo '<div id="messages2" class="'.$class.'">'.$Message.'<span style="float: right;margin-top:2px"><font size=1>'.time_elapsed_string($TimeSent).'</span></font></div>';



$x++;
}

// Typing part of message
echo '</div>
      <input type="text" id="messagetosend" name="message" class="messagetype" placeholder="Type a message..."><span id="send" class="messageSend">↩</span>

</div>';
?>

我可以根据需要添加更多信息。

1 个答案:

答案 0 :(得分:0)

我建议您退后一步,重新构造此方法。

例如,您不需要JsonNode(至少不需要它的当前格式),因为您可以从$FileList = Get-ChildItem "C:\\pathway\\Genomes\\" -Filter "*.log" # GETTING THE LIST OF .LOG FILES $FileList | %{ # FOR EACH LOOP ON ALL .LOG FILE blastn.exe -query .\filename_log -db ..\dbname -out filename.out -outfmt 6 -evalue 0.00001 | Set-Content $_.BaseName.out # YOUR COMMAND | SET-CONTENT FILENAME # TO SAVE COMMAND OUTPUT IN FILE # $_ IS FOR LOOP VARIABLE AND BASENAME IS FILENAME WITHOUT EXTENSION } conversationID中扣除它,这更加准确。您也不需要Sender,因为Receiver是同时包含日期和时间的datetime值。因此,MessageDateMessageTime可以删除。

然后,我们可以清理查询数量。您想获得所有消息,其中您是发件人,另一个用户是收件人,,您是收件人,另一个用户是该消息的发件人。然后,我们按日期排序(而不是ID!),并根据该行的conversationID值检查消息是绿色还是蓝色-如果设置了MessageDate变量,则为蓝色设置一个值发件人是当前用户,否则为绿色。

请注意,在输出HTML块时,可以退出PHP,这使它更易于阅读(和引号)。您还具有具有相同ID的HTML元素,这是不允许的。

在处理查询中的变量时,还应该使用准备好的语句。

Sender