【发布时间】:2019-11-03 22:29:49
【问题描述】:
我有一个代码可以在用户之间来回显示消息。出于某种原因,数据不匹配,我不确定我的代码中哪里有错误。我试图改变我的 $x < $sender 的 if 语句,但这没有用。
但显示的数据与数据库信息不一致。
“测试 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>';
?>
如果需要,我可以添加更多信息。
【问题讨论】:
-
您的
conversationID不一定是唯一的。如果您有两个名为woo和f3woof的用户在聊天怎么办?这可以为他们提供与woof和woof3相同的对话ID。同样做$Username$Myself会在对方登录时反转。 -
为什么不使用
JOIN,而不是使用这么多查询? -
@Qirel 对话 ID 是最后一分钟添加的,只是为了测试这个,所以我不需要两个不同的查询。其他两个查询(sql4 和 5)只计算发送的消息和接收的消息。 ,使用 Join 会解决我的数据不匹配问题吗?
标签: php mysql loops if-statement