gpt4 book ai didi

php - 我循环中的数据不匹配,不知道为什么

转载 作者:行者123 更新时间:2023-11-30 21:30:11 25 4
gpt4 key购买 nike

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

1

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

2

“测试 2”消息是从 woof3 发送的,所以当以 woof 身份登录时它应该是绿色而不是蓝色。而“test again”是从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 (至少不是当前格式),因为您可以从 Sender 中扣除它和 Receiver , 哪个更准确。你也不需要 MessageDate , 自 MessageTime是一个包含日期和时间的日期时间值。所以,conversationIDMessageDate可以删除。

然后,我们可以清理查询的数量。您希望获取您是发件人而其他用户是收件人的所有消息,您是收件人而其他用户是该消息的发件人。然后我们按日期排序(不是 ID!),并根据 Sender 检查消息应该是绿色还是蓝色。该行的值 - 设置 $class如果发件人是当前用户,则变量为蓝色,否则为绿色。

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

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

<?php

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

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

$Myself = $_SESSION['username'];

$sql = "SELECT Message, MessageTime, Sender, Receiver
FROM messages
WHERE (Sender = ? AND Receiver = ?)
OR (Receiver = ? AND Sender = ?)
ORDER BY `MessageTime` ASC");
if (!$stmt = $conn->prepare($sql)) {
error_log($conn->error);
die("An error occurred fetching messages");
}
$stmt->bind_param("ssss", $Myself, $Username, $Myself, $Username);
$stmt->bind_result($message, $timeSent, $sender, $received);
if (!$stmt->execute()) {
error_log($stmt->error);
die("An error occurred fetching messages");
}
?>
<!-- Header of message box -->
<div id="messages" class="messagePersonBox shadow">
<span class="usersname" name="receiver"><a href="Account?=<?php echo $Username; ?>"><?php echo $Username; ?></a></span>
<hr style="margin-top:24px">
<div id="allMessages" class="allMessages">
<?php
while ($stmt->fetch()) {
$class = $sender == $Myself ? 'messageDisplay' : 'messageDisplay1'; // Check which class should be used; if I'm the sender, show messageDisplay, if not show MessageDisplay1
?>
<div class="<?php echo $class; ?>
<?php echo $message; ?>
<span style="float: right; margin-top: 2px">
<?php echo time_elapsed_string($timeSent); ?>
</span>
</div>
<?php
}
?>
<!-- Typing part of message -->
</div>
<input type="text" id="messagetosend" name="message" class="messagetype" placeholder="Type a message..."><span id="send" class="messageSend">↩</span>
</div>
<?php
$stmt->close();

关于php - 我循环中的数据不匹配,不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56697212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com