Как обмен сообщениями работает на html-странице с использованием php и mysqli? - PullRequest
1 голос
/ 17 апреля 2019

Я создаю веб-сайт, на котором есть функция обмена сообщениями, эта функция должна работать так же, как и любая обычная система обмена сообщениями. Если щелкнуть ссылку / кнопку msg, она покажет нам список людей (еще не говорящих), с которыми мы общаемся, прежде чем войти в личное сообщение (беседу) от / к этому конкретному человеку, моя проблема в том, что я получаю дубликата друга ( имя пользователя другого человека), когда мы оба отправляем, поскольку у меня есть два столбца для имени пользователя (человек, который вошел в систему) и друга (с которым я отправил сообщение).

Я считаю, что моя проблема - это проблема логики, а не кода, но я могу ошибаться. Я пытался использовать разные виды логики, но не смог получить то, что хочу. Я также считаю, что если я задаю правильное условие во втором цикле «если» внутри цикла while, это может сработать. Проверьте мою таблицу и код ниже:

Table chats:

username(fk)   friend    chats    
   a             b       Hi b
   b             a       Hi a

И мой код PHP и SQL:

$username = $_SESSION['username'];
$sql = "SELECT DISTINCT username, friend FROM chats WHERE username = '$username' OR friend = '$username'";
            $result = $conn->query($sql);
            if($result->num_rows > 0)
            {
                while($row = $result->fetch_assoc())
                {               
                    if($username == $row['friend'])
                    {
                         echo "<a href = 'chat.php?usernames=".$row['username']."'>".$row['username']."</a>";
                    }   

                    if($username == $row['username'])
                    {     
                         echo "<a href = 'chat.php?usernames=".$row['friend']."'>".$row['friend']."</a>";
                    }                       
                }
            }

В приведенном выше коде, скажем, я 'a', что я получаю: два раза 'b', вместо одного, поэтому есть два 'b', но я хочу только один 'b'. Предположим, что второй записи нет, тогда я получу только один «b», но как только я получу ответ от «b», он отобразит 2 «b», то есть, как только появятся две записи «a» и «b», как в Таблица выше, 2 «б» будет отображаться. Стоит также отметить, что, поскольку я проверяю из 2 разных столбцов, DISTINCT в запросе не будет работать (я мог бы решить проблему, если вместо 2 использовался только 1 столбец, используя разные). Пожалуйста, проверьте проблему на изображении ниже , Спасибо за вашу помощь. enter image description here

1 Ответ

1 голос
/ 17 апреля 2019

Вы можете справиться с этим с помощью SQL или PHP.

пример PHP:

$username = $_SESSION['username'];
$sql = "SELECT username, friend FROM chats WHERE username = '$username' OR friend = '$username'";
$result = $conn->query($sql);
$chat_list = array();
if($result->num_rows > 0)
{
    while($row = $result->fetch_assoc())
    {    
        $user = ($username == $row['username'] ? $row["friend"] : $row['username']);
        if(!in_array($user, $chat_list) && $user != $username)
        {
            $chat_list[] = $user;
        }
    }
}
foreach($chat_list as $a_chat)
{
    echo "<a href = 'chat.php?usernames=".$a_chat."'>".$a_chat."</a>";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...