AbogusGames
Здравствуйте делаю вывод, заключил в цикл. Если входящая заявка одна, то всё хорошо. Но если их две, то первый пользователь покрывает второго. Вот код
PHP:
<?php if($subcount == 0) { echo ‘У вас нет заявок в друзья!’; } else { for($i = 0; $i < $subcount; $i++): // Получение имени друзей $getsubname1 = $mysql->query(«SELECT * FROM `requests` WHERE `status` = ‘1’ AND `from` = ‘$myid‘ OR `to` = ‘$myid‘ LIMIT 1″); $subname1 = $getsubname1->fetch_assoc()[‘to’]; $getsubname2 = $mysql->query(«SELECT `name`, `surname` FROM `users` WHERE `id` = ‘$subname1‘ LIMIT 1″); $subname2 = $getsubname2->fetch_assoc(); $subname = $subname2[‘name’] . « » . $subname2[‘surname’]; // Получение аватарки $getavatar = $mysql->query(«SELECT `avatar` FROM `users` WHERE `id` = ‘$subname1‘»); $avatar = $getavatar->fetch_assoc()[‘avatar’]; ?> <div class=»friend-body»> <img class=»favatar» src=»avatars/<?php echo $avatar ?>» alt=»<?php echo $subname ?>«> <div class=»friends-body»> <h4 class=»subname»><a href=»user.php?id=<?php echo $subname1?>«><?php echo $subname ?></a></h4> <div class=»friendaccept»> <form method=»POST»> <input class=»btn btn-secondary» name=»request_add» type=»submit» value=»Принять заявку»></input> </form> </div> </div> </div> <?php endfor; } ?>И скрин
Две входящие заявки от разных пользователей, но показывается тот кто последнее кинул.
И если убрать одну заявку, то всё становится нормально.
Drunkenmunky
Потому, что нужно делать один запрос и выводить в цикле его результаты.
А не делать запрос в цикле.
Покажите структуру таблицы, с данными.
И запрос на выборку заявок в друзья.
Без PHP
AbogusGames
Таблица `results` .
4 поля . id,status,from,to
Скрипт друзей
PHP:
<?php $mysql = new mysqli(‘localhost’, ‘root’, ‘root’, ‘renap’); $addfriend = $_POST[‘add_friend’]; $getstatus = $mysql->query(«SELECT `status` FROM `requests` WHERE `to` = ‘$myid‘ AND `from` = ‘$iduser‘»); $status = $getstatus->fetch_assoc()[‘status’]; $getstatus2 = $mysql->query(«SELECT `status` FROM `requests` WHERE `from` = ‘$myid‘ AND `to` = ‘$iduser‘»); $status2 = $getstatus2->fetch_assoc()[‘status’]; // Получение айди $fromuser = $_POST[‘id_user’]; if($status == 0) { if ($status2 == 0) { $checkfriend = «Добавить в друзья»; // Запрос на добавление в друзья $mysql->query(«INSERT INTO `requests` (`status`, `from`, `to`) VALUES(‘1’, ‘$fromuser‘, ‘$myid‘)»); } } } if($status2 == 1) { $checkfriend = «Отменить заявку»; $mysql->query(«DELETE FROM `requests` WHERE `from` = ‘$iduser‘ AND `to` = ‘$myid‘ OR `from` = ‘$myid‘ AND `to` = ‘$iduser‘»); } } else if($status2 != 1) { if($status == 1) { $checkfriend = «Отменить заявку»; $mysql->query(«DELETE FROM `requests` WHERE `from` = ‘$iduser‘ AND `to` = ‘$myid‘ OR `from` = ‘$myid‘ AND `to` = ‘$iduser‘»); } } } if($status2 == 2) { $checkfriend = «Удалить из друзей»; $mysql->query(«DELETE FROM `requests` WHERE `from` = ‘$iduser‘ AND `to` = ‘$myid‘ OR `from` = ‘$myid‘ AND `to` = ‘$iduser‘»); } } else if($status2 != 2) { if($status == 2) { $checkfriend = «Удалить из друзей»; $mysql->query(«DELETE FROM `requests` WHERE `from` = ‘$iduser‘ AND `to` = ‘$myid‘ OR `from` = ‘$myid‘ AND `to` = ‘$iduser‘»); } } } ?>Сам HTML одного поля друзей
HTML:
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:
<pre> <?php $mysqli = new mysqli(‘db_host’, ‘name’, ‘pasword’, ‘db_name’); $myid = ’26’; //$_GET[‘myid’]; $sql_format = «SELECT * FROM `requests` WHERE `from` = ‘%s‘ AND `status` IN (1, 2) ORDER BY `status` ASC»; $result_set = $mysqli->query($query); while ($row = $result_set->fetch_assoc()) { $status[$row[‘status’]][] = $row; } foreach($status as $key => $arr) { if($key == 1) { echo ‘заявки:<br>’; } if($key == 2) { echo ‘друзья:<br>’; } } ?>
miketomlin
from, to – varchar’s – это писец! Хорошо хоть не text. Индексы расставлены на этих двух полях, включая групповой юник?
— Добавлено —
Уже вижу, что нет:Код (Text):
— — Индексы таблицы `requests` — ALTER TABLE `requests` ADD PRIMARY KEY (`id`);— Добавлено —
Кста, первичным ключом можно сделать групповой юник из from, to