我在messages.php
中列出了一个列表,其中显示登录用户($username
)拥有的所有活动对话。PHP数组未按预期工作
什么被归类为“积极对话”? (应该在里面列出什么)
- 假设我以Alice身份登录。 Alice向Fred发送消息,这是一个积极的对话,其中
$username
(Alice)发送消息给$user
(Fred)。 - 假设我以Alice的身份登录。 Fred向Alice发送消息。这也是一个积极的对话。
- 摘要:任何消息到
$username
(登录用户)和任何消息从$username
应列出,只有一次。
当前行为:
目前,用下面的代码显示,正在为每个消息发送我(在涉及$username
的private_messages
表中的每一行)产生的li
。
例如:
- 同样,假设我登录的爱丽丝。
- Alice向Fred发送一条消息 - “Hello Fred”。
- 生成一个列表元素,陈述Fred的名字。
- 如果作为Alice向Fred发送另一条消息,它仍然会显示一个
li
元素为Fred
- 哪个好,这是我想要的,作为登录用户,我想看看我正在使用的用户用。 - 但是,如果我注销,登录
Fred
,并回复给爱丽丝,它将生成另一个li
元素,但这次使用登录的用户凭据,因此将生成一个名为Fred的名字等的li
等。 - 我需要的是所有这一切都在一个
li
因为对话是在两个人之间。
这是我当前的代码:
<?php
$displayed = [];
// get number of messages from a specific user to the logged in user
$get_mess = mysqli_query ($connect, "SELECT * FROM private_messages WHERE message_to = '$username' AND message_from ='$user'");
$num_msgs = mysqli_num_rows($get_mess);
// getting all the conversations which concern the user logged on.
$con = mysqli_query ($connect, "SELECT * FROM private_messages WHERE message_from='$username' OR message_to='$username'");
while ($get_con = mysqli_fetch_assoc($con)){
$msg_from = $get_con['message_from'];
$msg_to = $get_con['message_to'];
// get other persons firstname
$u_name = mysqli_query($connect, "SELECT * FROM users WHERE username ='$msg_to'");
$get_cu = mysqli_fetch_assoc($u_name);
$got_ufn = $get_cu['first_name'];
$got_uln = $get_cu['last_name'];
if ($msg_to == $username || $msg_from == $username){
if(!in_array($msg_to, $displayed)) {
echo "<li class='list' role='presentation'>
<div class='parent'>
<div class='disp_pic'>
<img class='img-rounded' src='$profile_pic2'/>
</div>
<div class='user_d'>
<a href='messages.php?u=$msg_from'> $got_ufn $got_uln</a>
</div>";
if ($num_msgs == 0){
// dont display badge
}else {
echo "<span id='num_of_msgs_from' class='badge'>";
if ($user == $user){
$num_msgs == 0;
echo "$num_msgs </span>";
}else {
echo " $num_msgs </span>";
}
}
echo"
</div>
</li>";
$displayed[] = $msg_to;
}
}
} // while closed
?>
解释什么是不工作,并尝试产生一个[MCVE]。 – axiac
可能是其他(未登录)用户名在'$ msg_from'或'$ msg_to'中。但是你的大部分代码都假设它在'$ msg_to'中。例如,'SELECT * FROM users WHERE username ='$ msg_to''。我的建议是创建一个名为'$ other_user'的变量,并在脚本的顶部有逻辑来确定它是否应该设置为'$ msg_from'或'$ msg_to'。 – mkasberg
另外,这行'if($ msg_to == $ username || $ msg_from == $ username)'什么都不做,因为你在一个总是为真的结果集迭代。 – mkasberg