PHP朋友2行之间的关系?

时间:2014-01-28 17:18:59

标签: php mysql relationship friend

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

数据库表的图像,因此很容易看到: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'; ?>

希望有人可以提供帮助吗?提前谢谢!

2 个答案:

答案 0 :(得分:0)

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

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')

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

然而,我不清楚如何在数据库中存储待处理的好友请求。所以你最终需要做的是在数据库中插入这些关系,然后只需更新那些数据库记录就可以改变&#34;被接受的&#34;一旦友谊得到确认,就会举旗。

答案 1 :(得分:0)

如果“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