Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在IF语句中将ID与用户名链接_Php_Mysql_Hyperlink_Html Table - Fatal编程技术网

Php 在IF语句中将ID与用户名链接

Php 在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 |

我在路上走了很长一段路,我正在做一个项目。然而,我似乎无法让它工作

脚本相当“简单”,但我无法按我想要的方式完成。 我列出了一个收件箱,在那里我可以看到我发送的消息和收到的消息,但是这些是ID而不是用户名,我想将ID链接到另一个表中的用户名

假设我是ID 42 username=Moominen
接收者是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。非常感谢。这就像一个魅力,所有的爱给你!