从表中获取值并回显它们

时间:2013-05-30 01:17:29

标签: php mysql

我正在为我的某个网站开发一个消息系统,而且我在收到消息时遇到了很多问题。由于某种原因,我无法正确获取语法,因此如果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。我只是不知道该做什么,过去几个小时我一直在搜索,我找不到我正在寻找的东西,否则我没有正确输入问题。

提前致谢。

2 个答案:

答案 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答案查询代替我的。我仍然会添加转义/正则表达式。

相关问题