添加朋友功能 - 朋友已添加

时间:2011-08-17 18:37:45

标签: php mysql

我有一个添加朋友的应用程序。如果用户已经是朋友,我需要检查我的脚本。我以为我可以通过COUNT来做到这一点。我确实喜欢这个:

            $username = $_GET[user];
            $ven_til_id = $_SESSION['userID'];

            $num = 1;
            if(isset($_GET['add_friend'])){
                $check=("SELECT username,ven_til_id, COUNT(*) AS num FROM friends WHERE username=$username AND ven_til_id=$ven_til_id GROUP BY username,ven_til_id")or die(mysql_error());
                $result=mysql_query($check);
                    if(!$result){
                        echo "Cant run query.";
                    } else {
                        $num = mysql_num_rows($result);
                    }
                    if($num>0){
                        header("Location: /profil/$username?add_error");
                } else {
                $sql=mysql_query("INSERT INTO friends (username,ven_til_id)VALUES('$username', '$ven_til_id')")or die(mysql_error());
                header("Location: /profil/$username");
                }
            }

            ?>

但是当我添加一个朋友时,没关系。它添加它,一切都很好。但是当我尝试添加另一个时,它说我们已经是朋友了。我想这是因为它计算了我的ID(ven_til_id)在表格中列出的次数。

1 个答案:

答案 0 :(得分:2)

你错过了一个逗号:

SELECT
 username,ven_til_id COUNT(*) AS num  FROM ...

应该是

SELECT
 username,ven_til_id, COUNT(*) AS num  FROM ...

此外,您对计数字段的引用不正确 - 它应该是第三列或$row[2]

您可能希望通过按名称引用字段来使代码更加健壮,例如$row['num']

最后要确认的是,使用计数检索的值被视为整数而不是字符串。我不认为这是问题所在,但您可能希望明确地将其投射以避免以后出现问题,例如......

$num = (int) $row[2];

选项1 只需选择适当的行,看看你得到多少记录......

SELECT  username,
    ven_til_id
FROM    friends
WHERE   username=$username
AND     ven_til_id=$ven_til_id

然后只计算使用PHP返回的记录数 - 例如mysql_num_rows()(我认为这是正确的函数名称)

<强>澄清: 变化

                    $row = mysql_fetch_row($result);
                    $num = $row[2];

                    $num = mysql_num_rows($result);

选项2

让MySQL为你做计数 - 在qhich情况下,你需要告诉它将多个记录组合在一起......

SELECT  username,
    ven_til_id,
    COUNT(*) as Num
FROM    friends
WHERE   username=$username
AND     ven_til_id=$ven_til_id
GROUP BY username,
    ven_til_id

然后只读第一行的第3个值(num),你就会有一个计数

注意:如果您只是期待1或0

,第二种方法可能会过度杀伤