Php 查询多个表和if、elseif、else条件
我试图根据查询返回显示不同的消息/按钮。有三种不同的情况Php 查询多个表和if、elseif、else条件,php,mysql,Php,Mysql,我试图根据查询返回显示不同的消息/按钮。有三种不同的情况 用户查看他的帐户 用户评论好友帐户 用户评论非好友帐户 因此,当用户检查自己的帐户时,我会隐藏“添加为好友”按钮。当他检查非好友帐户时,我显示“添加为好友”按钮。当用户检查朋友帐户时,我想显示此用户是其朋友的消息 这是查询和if、elseif、else条件。逻辑是错误的,但无法弄清楚到底是什么 if(isset($_GET['id']) && is_numeric($_GET['id'])){ $id = $_
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 ';
}
}
}
因此,$\u会话['id']
是当前会话(已登录用户)
$id
是非好友/好友档案
$row['user\u id']
是表user\u friends
$row['friend\u id']
是来自user\u friends
表的非friend/friend id您的查询逻辑有点错误
首先,您需要id
:用户id
和朋友id
因为$id=$\u GET['id']
我猜$id
var保持friend\u id
(用户尝试查看的配置文件的id)
但是您需要以某种方式获取当前的用户id
像$user\u id=$\u 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\u friends
的user\u id=friends\u id
中有记录吗?通常我不会。如果没有这样的记录
因此,您必须将您的条件如果($\u SESSION['id']==$row['user\u id'])
更改为
if($id == $user_id)
你的逻辑有点错
你想查什么?您想检查$id是否是$\u会话['id']的朋友。。因此,您应该选择基于$id或$u会话['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 ){
}
}
}
你能复制var_dump($result)的结果吗;请?它与查询相同。那么您可以打印$row的值吗?如果您的案例没有按预期工作,那么问题一定也在那里。我刚刚发现,您在第一个if-then-friend-id上检查用户id,这是有意的吗?现在我上了friend按钮被隐藏了。在当前用户上显示消息“已发送”。“非好友”按钮被隐藏,没有消息。是的,因为在IF
上,我在页面上检查当前用户配置文件的时间elseif
我想检查他们是否已经是朋友,即在朋友用户页面上else
是非好友页面时当前用户(登录用户)是$\u会话['id']
就像这样,我在每个用户上都有相同的配置文件。。我猜是因为$\u会话['id'],因为您没有按当前用户筛选user\u friends表,而只是按friend\u id筛选,所以如果此文件所有者是任何用户的朋友,则查询成功