Php 在IF语句中将ID与用户名链接
我在路上走了很长一段路,我正在做一个项目。然而,我似乎无法让它工作 脚本相当“简单”,但我无法按我想要的方式完成。 我列出了一个收件箱,在那里我可以看到我发送的消息和收到的消息,但是这些是ID而不是用户名,我想将ID链接到另一个表中的用户名 假设我是ID 42 username=MoominenPhp 在IF语句中将ID与用户名链接,php,mysql,hyperlink,html-table,Php,Mysql,Hyperlink,Html Table,我在路上走了很长一段路,我正在做一个项目。然而,我似乎无法让它工作 脚本相当“简单”,但我无法按我想要的方式完成。 我列出了一个收件箱,在那里我可以看到我发送的消息和收到的消息,但是这些是ID而不是用户名,我想将ID链接到另一个表中的用户名 假设我是ID 42 username=Moominen 接收者是ID50用户名=海龟 表消息 sent_to|sent_by|message|sent_time 42 | 50 | .... | ..... 50 | 42 |
接收者是ID50用户名=海龟 表消息
sent_to|sent_by|message|sent_time
42 | 50 | .... | .....
50 | 42 | .... | .....
表成员
Memberid|Username|profilepic|
42 |moominen|img.png |
50 |turtle |turtle.png|
因此,除了改变SQL查询的IF语句之外,我几乎所有的东西都在工作
$querysent = "SELECT * FROM messages WHERE (sent_by=".$logged." or sent_to=".$logged.") ORDER BY sent_time desc";
$sqlsent = mysqli_query($dbc,$querysent) or die(mysqli_error($dbc));
echo '<h3>Messages</h3>';
while($fetchsent = mysqli_fetch_array($sqlsent)) {
if ($fetchsent["sent_by"] == $logged) {
$query = "SELECT Memberid, Username, profilepic FROM members WHERE Memberid=$logged LIMIT 1";
} else {
$query = "SELECT Memberid, Username, profilepic FROM members WHERE Memberid=".$fetchsent["sent_by"]." LIMIT 1";
}
$sql = mysqli_query($dbc,$query) or die(mysqli_error($dbc));
$fetch = mysqli_fetch_assoc($sql) or die(mysqli_error($dbc));
echo '<table class="table-condensed">
<th>Sent by</th><th>Sent To</th><th>Message</th><th>Time</th>';
echo ('<tr><td><a href="index.php?page=profile&id='.$fetchsent["sent_by"].'">'.$fetch["Username"].'</a></td>
<td><a href="index.php?page=profile&id='.$fetchsent["sent_to"].'">'.$fetch["Username"].'</td>
<td>'.$fetchsent["message"].'</td>
<td><abbr class="postdate" title="'.$fetchsent["sent_time"].'"></a></td>
');
echo ('</tr>');
echo '</table>';
}
$querysent=“从消息中选择*”,其中(发送人=“.$logged.”或发送人=“.$logged.”)按发送时间描述发送订单;
$sqlsent=mysqli_query($dbc,$querysent)或die(mysqli_error($dbc));
回应"讯息",;
而($fetchsent=mysqli\u fetch\u数组($sqlsent)){
如果($fetchsent[“发送人”]==$logged){
$query=“从Memberid=$logged LIMIT 1的成员中选择Memberid、用户名、profilepic”;
}否则{
$query=“从成员中选择Memberid、用户名、profilepic,其中Memberid=”.$fetchsent[“发送人”]”。“限制1”;
}
$sql=mysqli_query($dbc,$query)或die(mysqli_error($dbc));
$fetch=mysqli_fetch_assoc($sql)或die(mysqli_error($dbc));
回声'
发送至消息时间';
回声('
');
回声(“”);
回声';
}
问题是我无法获取链接到表中相应ID的用户名。最好使用
内部联接
-这将返回两组表中存在匹配项的所有字段。如果您想从消息
中获取所有结果,即使成员
表中没有匹配的结果,也可以使用左连接
以下是更改查询的方式:
$querysent = "SELECT * FROM messages WHERE (sent_by=".$logged." or sent_to=".$logged.") ORDER BY sent_time desc";
将改为:
$querysent =
"SELECT m.*, mm.Memberid as Memberid_from, mm.Username as Username_from, mm.profilepic as profilepic_from, mmm.Memberid as Memberid_to, mmm.Username as Username_to, mmm.profilepic as profilepic_to
FROM messages m
INNER JOIN members mm ON mm.Memberid=m.sent_by
INNER JOIN members mmm ON mmm.Memberid=m.sent_to
WHERE (m.sent_by=".$logged." or m.sent_to=".$logged.") ORDER BY m.sent_time desc";
您现在应该使用$fetchsent[“Username\u from”]
获取发送人,使用$fetchsent[“Username\u to”]
获取发送人
如果您想了解有关联接的更多信息,请查看有关联接的文档:
旁注
我强烈建议切换到PDO-准备好的语句将保护您免受SQL注入的影响。您需要使用
JOIN
如果我使用您发送的SQL,我仍然需要拆分用户名$querysent=“从消息中选择m.*,mm.Memberid,mm.Username,mm.profilepic m.Memberid=m.sent_by WHERE(m.sent_by=“.logged.”或m.sent_to=“.logged.”)m.sent_time desc"; 代码>它将始终使用第一个用户名,并显示在两个TD上。您可以在表上进行双重内部连接,我将更新我的答案,谢谢,这将非常棒。当我完成这个小脚本后,我将转到PDO。非常感谢。这就像一个魅力,所有的爱给你!