2014-01-28 2 views
1

처음으로이 사이트를 사용했습니다 .. 주변을 둘러 보았지만 내 질문에 대한 답변을 찾는 것 같습니다. 데이터베이스 테이블의PHP 친구 관계 2 행 사이의 관계?

이미지 쉽게 그래서보고 .. 다른 방법으로하지만 내가 생각 원하는에 대한 답 것 : 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'; ?> 

누군가가 도움을 줄 수 있기를 바랍니다. 미리 감사드립니다!

답변

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

이 당신이 어느 방향으로 친구 검색을 수행 할 수있다.

그러나 내게 불분명 한 점은 보류중인 친구 요청을 데이터베이스에 저장하는 방법입니다. 따라서 궁극적으로해야 할 일은 DB에 이러한 관계를 삽입 한 다음 우정이 확인되면 해당 DB 레코드를 업데이트하여 "허용"플래그의 값을 변경하는 것입니다.

+0

인 경우 사용자에게도 나는 그런 질문을 한 적이 없지만 내가 원하는 것을 좋아합니다. PHP로 들어가기 전에 나는 그것을 줄 것이다! – user3245541

+0

좋아요, 그냥 시도해 보면 모두 작동합니다. 기본적으로 반전 된 2 개의 행을 추가합니다. 그것은 다른 사람뿐만 아니라 나를 위해 보류중인 요청으로 나오지만. 내가 가진 것은 요청을 "수락"하는 경우입니다 ("보류 = 1"일 경우 목록에 해당합니다). 그러면 0으로 변경되어 친구임을 나타냅니다. 요청을 보내지 만 나에게 직접 보내지 않으려면 어떻게해야합니까? 또한 아마도 내가 친구를 제거한 것처럼 두 항목을 모두 제거하기를 원하는 것처럼 삭제할 수도 있습니다. – user3245541

+0

@ user3245541 삭제하는 것은 같은 개념입니다 :'DELETE FROM users_friends WHERE (user_id = $ user_id AND friends_with = $ username_id) 또는 (friends_with = $ user_id AND user_id = $ username_id)'나는 당신의 논리가 요청을 보내는 것에 대해 확신하지 못합니다. ,하지만 분명히 테이블의 사용자 ID가 사용자의 사용자 ID와 같은 경우를 필터링하면됩니다. –

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

+0

대단히 고맙습니다. 지금은 이해가된다고 생각합니다. :) – user3245541