【问题标题】:How to make an add friend/defriend function in PHP?如何在 PHP 中添加好友/解除好友功能?
【发布时间】:2010-03-30 03:59:53
【问题描述】:

我创建了一个网站,人们可以在其中创建个人资料。但我试图弄清楚如何开始制作添加朋友按钮,以便用户可以拥有朋友。

在我的用户表中,我有 user_id、first_name、last_name、email 等。

我应该以某种方式将用户的 user_id 和朋友表中的朋友联系起来吗?

我是编程新手,所以这些东西对我来说仍然是新事物。谢谢!

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    好吧,让我们尽量保持简单。 本质上,您正在尝试找到一种将两个用户联系在一起的方法。

    由于我试图让事情保持简单,并且绝对不是暗示这是最好的方法,我认为这样做最简单的方法是创建一个新表(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';
    

    噗,你突然不再是我的朋友了;)

    是的,这些是基础知识。 我会先尝试这个解决方案,然后再继续使用可以让您更灵活的解决方案。

    【讨论】:

    • 要明确 - 这个方案更像是带有追随者/追随者的 twitter 模型,而不是带有“真实”朋友的 facebook 模型。我的意思是在 facebook,当每个用户必须在创建真正的关系之前添加一个朋友(我不知道实现但我敢打赌它是 2 条记录添加到朋友表中)时,我们会得到 2 方关系。
    • 您应该能够反转查询,例如:SELECT user_id FROM users_friends WHERE friend_id = '5'
    【解决方案2】:

    类似这样的:

    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;
    

    【讨论】:

      【解决方案3】:

      补充 f00 和 Isaac 的答案:

      1. 基本的伪代码如下:
      2. 在您的个人资料页面中有按钮/URL(可能是http://example.com/makefriend.php?memberid=$memberid)。让我们称之为“交朋友”
      3. makefriend.php 然后会从那个特定的个人资料页面检查 memberid。
      4. makefriend.php 也会从请求者那里获取 requesterid(这通常保存在会话中)。
        • 如果为空,可能未登录。
      5. 接下来,makefriend.php 会将 memberid 和 requesterid 插入到朋友列表中。

      【讨论】:

      • 2 应该通过带有 csrf-token 的 POST 发送,否则使用 CSRF-attack 与任何人交朋友非常简单
      【解决方案4】:

      我实际上创建了一个保存 user1 和 user2 值的朋友表。每当发送好友请求时,user2 是请求者,而 user1 是被请求者。这使得了解关注者和实际关注的人变得更加容易...... user2 是关注者,而 user1 是关注者。因此,如果您的用户名属于 user1,则意味着您正在被 user2 关注,如果您的用户名属于 user2,则意味着您正在关注 user1..... 这对您来说更容易。您可以通过从好友表中选择 user1 = 您的用户 ID 或 user2 = 您的用户 ID 来获得您的朋友。如果 user1 = your userid 那么 user2 是你的朋友 elseif user2 = your userid 那么 user1 是你的朋友。您可以将其存储在数组中。然后对于每个阵列,您可以找到他们的用户详细信息。希望你能理解? 您可以通过简单地删除 user1=your userid and user2=yourfriendid 或 user1=yourfriendid and user2=your userid 的列来添加删除朋友.....非常简单。

      如果您要求 通过以下方式请求朋友: 插入好友(id,user1,user2,accepted) values(' ', $yourfriendid,$youruserid,'0');

      如果有人要求您, 请求将由: 插入好友(id,user1,user2,accepted) values(' ',$youruserid,$yourfriendid,'0');

      一旦请求被接受,接受的列变为一 (1) 而不是零 (0)。您需要做的就是在好友被 user1 接受后通过设置accepted=1 来更新列。

      解除好友关系: 只需将包含您的用户 ID 和您的朋友 ID 的行删除为 user1 或 user2。

      屏蔽朋友: 您可能需要另一个表,您可以在其中添加被阻止的用户列表....但是,如果您熟悉 json_encode 和 json_decode 函数,将被阻止的用户存储到一个数组中会更容易,您只需使用保存该数组json_encode 到您的数据库中。您可以从数据库中获取数组,使用 json_decode 将其转换为真实数组,然后您可以删除任何被阻止的用户或将新阻止的用户添加到该数组中,然后再保存回您的数据库......这可能会节省空间。因此,您所有被阻止的用户将仅位于包含您的用户 ID 的一行中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-19
        • 2011-03-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多