我正在为我的某个网站开发一个消息系统,而且我在收到消息时遇到了很多问题。由于某种原因,我无法正确获取语法,因此如果user_id与receiver_id匹配,将显示与receiver_id匹配的每个值。我在我的Windows测试机器上工作正常,但是当我将它上传到我的ubuntu服务器时它就坏了。所以现在我正在尝试修复代码。我有这个:
$m = "SELECT m.message_id, m.receiver_id, m.sender_id, m.subject, m.body, m.posted, u.id, u.username FROM messages m, users u WHERE u.id = {$_SESSION['id']}";
$b = mysqli_query($dbc, $m);
?>
<div class="mailbox">
<a href="inbox.php?id=<?php echo $_GET['id']; ?>">Inbox</a><br />
<a href="sent.php?id=<?php echo $_GET['id']; ?>">Sent</a><br />
</div>
<div class="mailbox">
<h2>Messages for <?php echo $_SESSION['username']; ?></h2>
<?php echo output_message($message); ?>
<div id="messages">
<?php
if (mysqli_num_rows($b) > 0) {
while ($mess_row = mysqli_fetch_array($b, MYSQLI_NUM)) {
$u = "SELECT * FROM users WHERE id={$mess_row[1]}";
$rec = mysqli_query($dbc, $u);
$rec_row = mysqli_fetch_array($rec, MYSQLI_NUM);
$s = "SELECT * FROM users WHERE id={$mess_row[2]}";
$send = mysqli_query($dbc, $r);
$send_row = mysqli_fetch_array($send, MYSQLI_NUM);
echo "<a href=\"received.php?id=$mess_row[0]&sender=$send_row[1]\">$mess_row[3]</a> Posted by: <b><a href=\"profile.php?id=$mess_row[2]\">$send_row[1]</a></b> on: $mess_row[5]<br /><hr />";
}
} else {
echo "No messages.";
}
我做错了什么?我以为我已经修好但是它只是吐了五次相同的记录。我尝试过分组,只给了我一条记录。我尝试在while循环之外移动$ s调用但是我无法以这种方式绘制发送者的user_id。我只是不知道该做什么,过去几个小时我一直在搜索,我找不到我正在寻找的东西,否则我没有正确输入问题。
提前致谢。
答案 0 :(得分:1)
使用JOIN在一个查询中获取所有内容:
$m = "SELECT m.message_id, m.receiver_id, m.sender_id, m.subject, m.body, m.posted, s.username sender_name, r.username receiver_name
FROM messages m
JOIN users r ON r.id = m.receiver_id
JOIN users s ON s.id = m.sender_id
WHERE u.id = {$_SESSION['id']}";
答案 1 :(得分:0)
我为匆匆扔掉这个而道歉。希望它有所帮助。
使用此作为您的查询,然后您将不必经历并执行那些可怕的额外查询以获取用户信息。
$id = $dbc->real_escape_string($_SESSION['id']);
$m = "SELECT m.message_id, m.receiver_id, m.sender_id, m.subject, m.body, m.posted, u.id, u.username
FROM messages m
INNER JOIN users u ON m.receiver_id=u.id
WHERE u.id = '$id';";
额外注意:您需要转义会话ID字符串。我可能也会使用正则表达式验证它只是数字。
编辑:使用@Barmar答案查询代替我的。我仍然会添加转义/正则表达式。