Как сделать функцию добавления друга / друга в PHP? - PullRequest
1 голос
/ 30 марта 2010

Я создал сайт, где люди могут создать профиль. Но я пытаюсь понять, как начать создавать кнопку «Добавить друга», чтобы пользователи могли иметь друзей.

В моей пользовательской таблице у меня есть user_id, first_name, last_name, email и т. Д.

Должен ли я как-то связать user_id пользователя и друга в таблице друзей?

Я новичок в программировании, поэтому эти вещи для меня все еще новы. Спасибо!

Ответы [ 4 ]

4 голосов
/ 30 марта 2010

Хорошо, давайте попробуем сохранить это простым. По сути, вы пытаетесь найти способ соединить двух пользователей вместе.

Поскольку я пытаюсь сделать вещи простыми и определенно не подразумеваю, что это лучший способ сделать это, я думаю, самый простой способ сделать это - создать новую таблицу users_friends) со следующими полями: (user_id) и (friend_id).

Итак, допустим, мой user_id равен 5. Ваш user_id равен 10.

Я хочу добавить вас в друзья, поэтому я бы добавил запись в эту вновь созданную таблицу со следующими значениями: user_id = 5, friend_id = 10.

Итак, предположим, что вы хотите отобразить всех моих друзей, вы можете выполнить запрос, например:

SELECT * FROM `users` WHERE `user_id` IN ( SELECT `friend_id` FROM `users_friends` WHERE `user_id` = '5' );

Конечно, удалить друга легко, все, что вам нужно сделать, это удалить запись из вновь созданной таблицы ...

DELETE FROM `users_friends` WHERE `user_id` = '5' AND `friend_id` = '10';

И пуф, ты вдруг больше не мой друг;)

Так что да, это основы. Я бы попробовал это решение, прежде чем перейти к решению, которое обеспечит вам большую гибкость.

2 голосов
/ 30 марта 2010

как то так:

create table users(
 user_id int unsigned not null auto_increment primary key,
 username varbinary(32) not null
)engine=innodb;


create table user_friends(
 user_id int unsigned not null,
 friend_user_id int unsigned not null,
 primary key (user_id, friend_user_id)
)engine=innodb;

для отображения набора друзей пользователя:

select
 u.*
from
 user_friends uf
inner join users u on uf.friend_user_id = u.user_id
where
 uf.user_id = 1;
0 голосов
/ 03 июня 2018

Я действительно создал таблицу друзей, которая содержит значение для user1 и user2. Всякий раз, когда отправляется запрос на добавление в друзья, user2 - запрашивающая сторона, а user1 - запрашиваемая. Это значительно облегчает знакомство с подписчиком и тем, за кем на самом деле следили ..... пользователь2 - подписчик, а пользователь1 - подписчик. Поэтому, если ваше имя пользователя подпадает под user1, это означает, что за вами следует user2, а если ваше имя пользователя подпадает под user2, это означает, что вы следуете за user1 ..... Это значительно облегчит вам задачу. Вы можете получить своих друзей, выбрав из таблицы друзей, где user1 = ваш идентификатор пользователя или user2 = ваш идентификатор пользователя. Если user1 = ваш идентификатор пользователя, то user2 - ваш друг, а если user2 = ваш идентификатор пользователя, то user1 - ваш друг. Вы можете сохранить это в массиве. Затем для каждого массива вы можете найти свои пользовательские данные. Надеюсь, вы понимаете? Вы можете добавить удаление друзей, просто удалив столбец, где user1 = ваш идентификатор пользователя и user2 = ваш идентификатор друга или user1 = ваш идентификатор друга и user2 = ваш идентификатор пользователя ..... Довольно просто.

Если вы запрашиваете Запросить друзей по: Вставьте в друзья (id, user1, user2, accept) значения ('', $ yourfriendid, $ youruserid, '0');

Если вас кто-то запрашивает, Запрос будет по: Вставьте в друзья (id, user1, user2, accept) значения ('', $ youruserid, $ yourfriendid, '0');

Как только запрос принят, принятый столбец становится ОДНЫМ (1) вместо нуля (0). Все, что вам нужно сделать, это обновить столбец, установив значение принято = 1 после того, как друг был принят пользователем1.

Дружить Просто удалите строку, содержащую как ваш ID пользователя, так и Yourfriendid как user1 или user2.

Блокировка друга: Вам может понадобиться другая таблица, в которую вы можете добавить свой список заблокированных пользователей .... Но если вы знакомы с функциями json_encode и json_decode, вам будет проще хранить заблокированных пользователей в одном массиве, все что вам нужно, это сохранить этот массив с помощью json_encode в вашу базу данных. Вы можете извлечь массив из базы данных, преобразовать его в реальный массив с помощью json_decode, затем вы можете удалить любого заблокированного пользователя или добавить вновь заблокированного пользователя в этот массив перед сохранением обратно в базу данных ... Это, вероятно, сэкономит пространство. Таким образом, все ваши заблокированные пользователи будут находиться в одной строке, содержащей ваш идентификатор пользователя.

0 голосов
/ 30 марта 2010

В дополнение к f00 и ответу Исаака:

  1. основной псевдокод будет выглядеть так:
  2. есть кнопка / URL на странице вашего профиля (возможно http://example.com/makefriend.php?memberid=$memberid). Давайте назовем это 'подружиться'
  3. makefriend.php проверит memberid на этой странице профиля.
  4. makefriend.php тоже получит requestterid от запрашивающей стороны (обычно это сохраняется в сеансе).
    • если пусто, возможно, не авторизовано.
  5. Далее makefriend.php вставит memberid и requestterid, скажем, в список друзей.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...