我试图根据查询返回显示不同的消息/按钮。有3种不同的情况。
因此,当用户检查自己的帐户时,我会隐藏按钮"添加为朋友"。当他检查非朋友帐户时,我会显示按钮"添加为朋友"。当用户检查朋友帐户时,我想显示该用户是他的朋友的消息。
这是查询和if,elseif,else条件。逻辑是错误的,但无法弄清楚究竟是什么。
if(isset($_GET['id']) && is_numeric($_GET['id'])){
$id = $_GET['id']; {
$result = $pdo->prepare("SELECT usr.*, userFriends.*
FROM users usr
LEFT JOIN user_friends userFriends
ON usr.id = userFriends.friend_id
WHERE id = ?
LIMIT 1");
$result -> bindParam(1, $id, PDO::PARAM_INT);
$result -> execute();
foreach ( $result as $row )
{
// some html here
if($_SESSION['id'] == $row['user_id'])
{
echo '';
}
elseif ($id == $row['friend_id'])
{
echo ' Already friends ';
}
else
{
echo ' Add as friend ';
}
}
}
所以$_SESSION['id']
是当前的(已登录用户)。
$id
是非朋友/朋友个人资料
$row['user_id']
是表user_friends
$row['friend_id']
是来自user_friends
表
答案 0 :(得分:1)
你的查询逻辑有点不对。
首先,您需要id
:user_id
和friend_id
。
自$id = $_GET['id'];
以来我猜$id
var保持friend_id
(个人资料用户的ID尝试查看)。
但你需要以某种方式获得最新的user_id
。
赞$user_id = $_SESSION['id'];
然后:
SELECT u.id user_id, uf.frien_id
FROM users u
LEFT JOIN user_friends uf
ON u.id = uf.user_id
AND uf.friend_id = ?
WHERE u.id = ?
LIMIT 1
...
$result -> bindParam(1, $id, PDO::PARAM_INT);
$result -> bindParam(1, $user_id, PDO::PARAM_INT);
你真的有user_friends
user_id = friend_id
的记录吗?通常我没有。所以如果没有这样的记录。
因此,您必须将条件if($_SESSION['id'] == $row['user_id'])
更改为
if($id == $user_id)
答案 1 :(得分:1)
你的逻辑错了..
你要检查什么?你想检查$ id是$ _SESSION ['id']的朋友..所以你应该根据$ id或$ _SESSION ['id']进行选择?
if(isset($_GET['id']) && is_numeric($_GET['id'])){
//the first thing you need to check is that is this you are viewing your own profile by just checking this and without even need to query.
if($_SESSION['id'] == $_GET['id']){
echo '';
} else {
$id = $_GET['id'];
$result = $pdo->prepare("SELECT usr.*, userFriends.*
FROM users usr
LEFT JOIN user_friends userFriends
ON usr.id = userFriends.friend_id
WHERE **Your ID Column**= ?
LIMIT 1");
$result -> bindParam(1, $_SESSION['id'], PDO::PARAM_INT);
$result -> execute();
//check if the result return rows?
// if return rows of data, it's already friend
// else its not friend yet
// what's the purpose for this loop then?
foreach ( $result as $row ){
}
}
}