Вывод друзей

AbogusGames

Здравствуйте делаю вывод, заключил в цикл. Если входящая заявка одна, то всё хорошо. Но если их две, то первый пользователь покрывает второго. Вот код

PHP:
  1.                      <?php
  2.             if($subcount == 0) {
  3.                 echo ‘У вас нет заявок в друзья!’;
  4.             }
  5.             else {
  6.              for($i = 0; $i < $subcount; $i++):
  7.                  // Получение имени друзей
  8.                 $getsubname1 = $mysql->query(«SELECT * FROM `requests` WHERE `status` = ‘1’ AND `from` = ‘$myid‘ OR `to` = ‘$myid‘ LIMIT 1″);
  9.                 $subname1 = $getsubname1->fetch_assoc()[‘to’];
  10.                 $getsubname2 = $mysql->query(«SELECT `name`, `surname` FROM `users` WHERE `id` = ‘$subname1‘ LIMIT 1″);
  11.                 $subname2 = $getsubname2->fetch_assoc();
  12.                 $subname = $subname2[‘name’] . «&nbsp;» . $subname2[‘surname’];
  13.                 // Получение аватарки
  14.                 $getavatar = $mysql->query(«SELECT `avatar` FROM `users` WHERE `id` = ‘$subname1‘»);
  15.                 $avatar = $getavatar->fetch_assoc()[‘avatar’];
  16.          ?>
  17.               <div class=»friend-body»>
  18.                   <img class=»favatar» src=»avatars/<?php echo $avatar ?>» alt=»<?php echo $subname ?>«>
  19.                   <div class=»friends-body»>
  20.                       <h4 class=»subname»><a href=»user.php?id=<?php echo $subname1?>«><?php echo $subname ?></a></h4>
  21.                       <div class=»friendaccept»>
  22.                   <form method=»POST»>
  23.                     <input class=»btn btn-secondary» name=»request_add» type=»submit» value=»Принять заявку»></input>
  24.                 </form>
  25.                       </div>
  26.                   </div>
  27.               </div>
  28.         <?php endfor; } ?>

И скрин
upload_2021-5-2_9-54-18.png

Две входящие заявки от разных пользователей, но показывается тот кто последнее кинул.
И если убрать одну заявку, то всё становится нормально.
upload_2021-5-2_9-55-10.png

 

Drunkenmunky

Потому, что нужно делать один запрос и выводить в цикле его результаты.
А не делать запрос в цикле.
Покажите структуру таблицы, с данными.
И запрос на выборку заявок в друзья.
Без PHP

 

AbogusGames

Таблица `results` .
4 поля . id,status,from,to

upload_2021-5-2_13-28-2.png

Скрипт друзей

PHP:
  1. <?php
  2.                         $mysql = new mysqli(‘localhost’, ‘root’, ‘root’, ‘renap’);
  3.                         $addfriend = $_POST[‘add_friend’];
  4.                         $getstatus = $mysql->query(«SELECT `status` FROM `requests` WHERE `to` = ‘$myid‘ AND `from` = ‘$iduser‘»);
  5.                         $status = $getstatus->fetch_assoc()[‘status’];
  6.                         $getstatus2 = $mysql->query(«SELECT `status` FROM `requests` WHERE `from` = ‘$myid‘ AND `to` = ‘$iduser‘»);
  7.                         $status2 = $getstatus2->fetch_assoc()[‘status’];
  8.                         // Получение айди
  9.                             $fromuser = $_POST[‘id_user’];
  10.                             if($status == 0) {
  11.                                     if ($status2 == 0) {
  12.                                         $checkfriend = «Добавить в друзья»;
  13.                                         if(isset($addfriend)) {
  14.  
  15.                                 // Запрос на добавление в друзья
  16.                                 $mysql->query(«INSERT INTO `requests` (`status`, `from`, `to`) VALUES(‘1’, ‘$fromuser‘, ‘$myid‘)»);
  17.                                 header(‘Location: ../user.php?id=’ . $iduser);
  18.         }
  19.                             }
  20.                         }
  21.     if($status2 == 1) {
  22.             $checkfriend = «Отменить заявку»;
  23.             if(isset($addfriend)) {
  24.                 $mysql->query(«DELETE FROM `requests` WHERE `from` = ‘$iduser‘ AND `to` = ‘$myid‘ OR `from` = ‘$myid‘ AND `to` = ‘$iduser‘»);
  25.                 header(‘Location: ../user.php?id=’ . $iduser);
  26.     }
  27. }
  28.         else if($status2 != 1) {
  29.             if($status == 1) {
  30.                 $checkfriend = «Отменить заявку»;
  31.             if(isset($addfriend)) {
  32.                 $mysql->query(«DELETE FROM `requests` WHERE `from` = ‘$iduser‘ AND `to` = ‘$myid‘ OR `from` = ‘$myid‘ AND `to` = ‘$iduser‘»);
  33.                 header(‘Location: ../user.php?id=’ . $iduser);
  34.     }
  35.             }
  36.     }
  37.     if($status2 == 2) {
  38.         $checkfriend = «Удалить из друзей»;
  39.         if(isset($addfriend)) {
  40.             $mysql->query(«DELETE FROM `requests` WHERE `from` = ‘$iduser‘ AND `to` = ‘$myid‘ OR `from` = ‘$myid‘ AND `to` = ‘$iduser‘»);
  41.             header(‘Location: ../user.php?id=’ . $iduser);
  42.         }
  43.     } else if($status2 != 2) {
  44.         if($status == 2) {
  45.                     $checkfriend = «Удалить из друзей»;
  46.         if(isset($addfriend)) {
  47.             $mysql->query(«DELETE FROM `requests` WHERE `from` = ‘$iduser‘ AND `to` = ‘$myid‘ OR `from` = ‘$myid‘ AND `to` = ‘$iduser‘»);
  48.             header(‘Location: ../user.php?id=’ . $iduser);
  49.         }
  50.         }
  51.     }
  52. ?>

Сам HTML одного поля друзей

HTML:
  1.  
  2.               <div class=«friend-body»>
  3.                   <img class=«favatar» src=«avatars/<?php echo $avatar ?>» alt=»<?php echo $friendname ?>«>
  4.                   <div class=«friends-body»>
  5.                       <h4 class=«friendname»><a href=«user.php?id=<?php echo $friendname1?>«><?php echo $friendname ?></a></h4>
  6.                       <div class=«sendmsg»>
  7.                           <a class=«sendmessage» href=«message.php?to=<?php echo $friendname1 ?>«><br>Написать сообщение</a>
  8.                       </div>
  9.                   </div>
  10.               </div>
  11.  
 

Drunkenmunky

Это не совсем то.
Зайдите в phpMyadmin, откройте таблицу, выберите вкладку «экспорт» и выгрузите таблицу или её часть в SQL.

 

AbogusGames

Тогда бы написали дамп таблицы) https://drive.google.com/file/d/1tCfL4aFBtwpCFXhGfT0horV-H9lR6OGB/view?usp=sharing

 

Drunkenmunky

Хорошо, сойдемся на этом.
Далее.
Что из этой таблицы нужно вывести — что в ней что?

 

AbogusGames

Статус — если значение статуса 1, то это означает, что пользователь ещё не принял заявку, и переменная $checkfriend = 1. Если статус 2, то переменная $checkfriend = 2, это значит, что пользователь добавил тебя в друзья. Ну и завися от значения переменной $checkfriend выводим текст на кнопке. From — это тот, кому отправили заявку. To — тот кто отправлял заявку.

 

Drunkenmunky

Хорошо, с этим тоже разобрались.

А вот тут непонятно.
В таблице две строки. Закономерностей не нашел — ничего общего.
Почему их нужно вывести на одной странице?

 

AbogusGames

Вывести надо только те, у которых status == 1, и from == $myid (мой ид). Это надо вывести в заявках. В друзьях надо вывести тех, у кого status == 2, и from == $myid
— Добавлено —

У вас есть вк, что-бы там быстрее общаться?

 

Drunkenmunky

PHP:
  1. <pre>
  2. <?php
  3.  
  4. $mysqli = new mysqli(‘db_host’, ‘name’, ‘pasword’, ‘db_name’);
  5.  
  6. $myid = ’26’; //$_GET[‘myid’];
  7.  
  8. $sql_format = «SELECT *
  9. FROM `requests`
  10. WHERE `from` = ‘%s
  11. AND `status` IN (1, 2)
  12. ORDER BY `status` ASC»;
  13.  
  14. $query = sprintf($sql_format, $mysqli->real_escape_string($myid));
  15.  
  16. $result_set = $mysqli->query($query);
  17.  
  18. $status = array();
  19. while ($row = $result_set->fetch_assoc())
  20. {
  21.      $status[$row[‘status’]][] = $row;
  22. }
  23.  
  24. foreach($status as $key => $arr)
  25. {
  26. if($key == 1)
  27.   {
  28.    echo ‘заявки:<br>’;
  29.    print_r ($arr);
  30.   }
  31.  
  32. if($key == 2)
  33.   {
  34.    echo ‘друзья:<br>’;
  35.    print_r ($arr);
  36.   }
  37. }
  38. ?>
 

miketomlin

from, to – varchar’s – это писец! Хорошо хоть не text. Индексы расставлены на этих двух полях, включая групповой юник?
— Добавлено —
Уже вижу, что нет:

Код (Text):
  1. — Индексы таблицы `requests`
  2. ALTER TABLE `requests`
  3.   ADD PRIMARY KEY (`id`);

— Добавлено —
Кста, первичным ключом можно сделать групповой юник из from, to ;)

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *