【问题标题】:PHP Friend Relationship between 2 rows?2行之间的PHP朋友关系?
【发布时间】:2014-02-20 03:38:30
【问题描述】:

我第一次使用这个网站.. 我环顾四周,但似乎找不到我的问题的答案。它已经以其他方式得到了回答,但不是我想要的..

数据库表的图像,很容易看到:http://puu.sh/6BtmZ.png

所以基本上我有一个friends.php页面,它有一个输入字段和提交按钮,你输入一个用户名并按下提交,我希望它向那个用户发送请求;我已经让它工作了,用户可以接受,但它只会把“朋友”放在他身上。因为在 FRIENDA 中是 FRIENDB 的朋友,但在 FRIENDB 的页面上,他不是 FRIENDA 的朋友。我希望这是有道理的。

我只是想要这样,您发送请求,对方接受,双方可以将对方视为朋友。

 <?php 
include 'core/init.php';
// check
protect_page();
include 'includes/templates/header.php'; 

$user_id = $user_data['user_id'];

if (empty($_POST) === false) {
    $required_fields = array('username');

    foreach($_POST as $key=>$value) {
        if (empty($value) && in_array($key, $required_fields) === true) {
            $errors[] = 'You need to enter a username to send a request!';
            break 1;
        }
    }
    if (empty($errors) === true) {
        if (user_exists($_POST['username']) === false) {
            $errors[] = 'Sorry, the username \'' . htmlentities($_POST['username']) . '\' doesn\'t exist.';
        }
    }
}

if (isset($_GET['success']) && empty($_GET['success'])) {
    echo 'Friend request sent!';
} else {

if (empty($_POST) === false && empty($errors) === true) {
    // add friend
    $username = $_POST['username'];
    $get_userid = mysql_query("SELECT `user_id` FROM `users` WHERE `username` = '$username'");
    $row = mysql_fetch_array($get_userid);
    $username_id = $row[user_id];   
    $user_id = $user_data['user_id'];

    mysql_query("INSERT INTO `users_friends` (user_id, friends_with) VALUES ('$user_id', '$username_id')");

    //redirect
    header('location: friends.php?success');
    //exit
    exit();

    } else if (empty($errors) === false) {
        // output errors
        echo output_errors($errors);
    }
}
?>

<h1>Friends</h1>
<p>
<h2>Send a friend request:</h2>
    <form id="friend_request" action="" method="POST">
        <ul>
            <li>Username: <input type="text" name="username"><input id="friend_request" type="submit"></li>
        </ul>
    </form>
</p>

<p>
<h2>Pending requests:</h2>
<?php
if(isset($_POST['decline'])){
$decline_id = $_POST['decline_friend_id'];  
$decline_query = "DELETE FROM `users_friends` WHERE `id` = $decline_id"; 
$accept_result = mysql_query($decline_query);
}

if(isset($_POST['accept'])){
       $accept_id = $_POST['accept_friend_id'];  
       $accept_query = "UPDATE `users_friends` SET `request_pending` = 0 WHERE `id` = $accept_id"; 
       $accept_result = mysql_query($accept_query);     
}

$result = mysql_query("SELECT * FROM `users_friends` WHERE `friends_with` = '$user_id' AND `request_pending` = 1");

while($requests_row = mysql_fetch_array($result)) {
    $get_username = mysql_query("SELECT `username` FROM `users` WHERE `user_id` = '$requests_row[user_id]'");
    $get_username_row = mysql_fetch_array($get_username);
    $request_from = $get_username_row[username];

    echo 'Request from: ' . $request_from . '<form id="decline" action="" method="POST">
                        <input type="hidden" name="decline_friend_id" value="' . $requests_row['id'] . '">
                        <input type="submit" value="Decline" name="decline">
                        </form>
                        <form id="accept" action="" method="POST">
                        <input type="hidden" name="accept_friend_id" value="' . $requests_row['id'] . '">
                        <input type="submit" value="Accept" name="accept">
                        </form>';
    echo '<br />';
}
?>
</p>

<h2>Your friends:</h2>
<?php
$friends_result = mysql_query("SELECT * FROM `users_friends` WHERE `friends_with` = '$user_id' AND `request_pending` = 0");
while($friends_row = mysql_fetch_array($friends_result)) {
    $get_username = mysql_query("SELECT `username` FROM `users` WHERE `user_id` = '$friends_row[user_id]'");
    $get_username_row = mysql_fetch_array($get_username);
    $friend = $get_username_row[username];

    echo $friend . '<br />';
    }
    ?>
    </p>

    <?php include 'includes/templates/footer.php'; ?>

希望有人能提供帮助吗?提前致谢!

【问题讨论】:

    标签: php mysql relationship friend


    【解决方案1】:

    您可能想要做的是在两个朋友都确认后在朋友关系中插入两个方向。所以不要这样做:

    INSERT INTO `users_friends` (user_id, friends_with) VALUES ('$user_id', '$username_id')
    

    你会这样做:

    INSERT INTO `users_friends` (user_id, friends_with) VALUES ('$user_id', '$username_id'),('$username_id','$user_id')
    

    这将允许您在任一方向进行好友查找。

    但我不清楚的是,您如何在数据库中存储待处理的好友请求。因此,您最终可能需要做的是在数据库中插入这些关系,然后在确认友谊后简单地更新这些数据库记录以更改“已接受”标志的值。

    【讨论】:

    • 也谢谢你,这听起来更像我想要的,虽然我从来没有做过这样的查询。虽然我刚刚进入 PHP 所以我会先给出它!
    • 好的,刚刚试了一下,一切正常。它添加了 2 行基本上是反向的,这很好。尽管它对我和其他人来说都是一个未决的请求。我得到的是,如果你“接受”请求(如果“pending = 1”,这只是一个列表),它将变为 0,表示他们是你的朋友。我该如何让它发送请求而不是发送给我自己?也可能删除,好像我删除了我希望它删除两个条目的朋友。
    • @user3245541 删除是同一个概念:DELETE FROM users_friends WHERE (user_id = $user_id AND friends_with = $username_id) OR (friends_with = $user_id AND user_id = $username_id) 我不确定您发送请求的逻辑是什么,但显然您只需过滤掉表中用户 ID 为与用户的用户 ID 相同。
    【解决方案2】:

    如果“users_friends”表的结构是这样的:

    me        friends_with      request_pending
    

    获取结果(= 如果用户是您的朋友):

    "SELECT * FROM `users_friends` WHERE (`friends_with` = '$user_id' AND `me`= `$me`) OR (`friends_with` = '$me' AND `me`= `$user_id `) AND `request_pending` = 0"
    

    您检查用户是否在friends_with,而您在me.. 或者用户是否在me,而您在friends_with

    【讨论】:

    • 非常感谢,我觉得现在有道理,我会先给它! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多