처음으로이 사이트를 사용했습니다 .. 주변을 둘러 보았지만 내 질문에 대한 답변을 찾는 것 같습니다. 데이터베이스 테이블의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'; ?>
누군가가 도움을 줄 수 있기를 바랍니다. 미리 감사드립니다!
인 경우 사용자에게도 나는 그런 질문을 한 적이 없지만 내가 원하는 것을 좋아합니다. PHP로 들어가기 전에 나는 그것을 줄 것이다! – user3245541
좋아요, 그냥 시도해 보면 모두 작동합니다. 기본적으로 반전 된 2 개의 행을 추가합니다. 그것은 다른 사람뿐만 아니라 나를 위해 보류중인 요청으로 나오지만. 내가 가진 것은 요청을 "수락"하는 경우입니다 ("보류 = 1"일 경우 목록에 해당합니다). 그러면 0으로 변경되어 친구임을 나타냅니다. 요청을 보내지 만 나에게 직접 보내지 않으려면 어떻게해야합니까? 또한 아마도 내가 친구를 제거한 것처럼 두 항목을 모두 제거하기를 원하는 것처럼 삭제할 수도 있습니다. – user3245541
@ 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와 같은 경우를 필터링하면됩니다. –