0

我有一个不友好的系统,它可以工作。单击取消好友按钮时,表格会更新以删除您已更新的好友。唯一的问题是它会删除你所有的朋友,而不是数组中的 1 个。

该数组类似于这个friend1,friend2,friend3,如果你想删除friend2,friend1和3也会无缘无故地被删除。

帮助 :(

    if (@$_POST['removefriend']) {
    //Friend array for logged in user
     $add_friend_check = mysql_query("SELECT friend_array FROM users WHERE username='{$_SESSION['user_login']}'");
     $get_friend_row = mysql_fetch_assoc($add_friend_check);
      $friend_array = $get_friend_row['friend_array'];
      $friend_array_explode = explode(",",$friend_array);
      $friend_array_count = count($friend_array_explode);

      //Friend array for user who owns profile
      $add_friend_check_username = mysql_query("SELECT friend_array FROM users WHERE username='{$_SESSION['user_login']}'");
      $get_friend_row_username = mysql_fetch_assoc($add_friend_check_username);
        $friend_array_username = $get_friend_row_username['friend_array'];
        $friend_array_explode_username = explode(",",$friend_array_username);
        $friend_array_count_username = count($friend_array_explode_username);

        $usernameComma = ",".$username;
        $usernameComma2 = $username.",";

        $userComma = ",".$user;
        $userComma2 = $user.",";

        if (strstr($friend_array,$usernameComma)) {
        $friend1 = str_replace("$usernameComma","",$friend_array);
        }
        else
        if (strstr($friend_array,$usernameComma2)) {
        $friend1 = str_replace("$usernameComma2","",$friend_array);
         }
         else
         if (strstr($friend_array,$username)) {
          $friend1 = str_replace("$username","",$friend_array);
          }
         //Remove logged in user from other persons array
         if (strstr($friend_array,$userComma)) {
         $friend2 = str_replace("$userComma","",$friend_array);
           }
         else
         if (strstr($friend_array,$userComma2)) {
         $friend2 = str_replace("$userComma2","",$friend_array);
         }
         else
         if (strstr($friend_array,$user)) {
         $friend2 = str_replace("$user","",$friend_array);
         }

         $friend2 = "";

        $removeFriendQuery = mysql_query("UPDATE users SET friend_array='$friend1' WHERE username='{$_SESSION['user_login']}'");
        $removeFriendQuery_username = mysql_query("UPDATE users SET friend_array='$friend2' WHERE username='{$_SESSION['user_login']}'");
        echo "Friend Removed ...";
        }
4

1 回答 1

0

首先,我建议遵循什么@MarkBaker@nichar建议和规范您的数据库结构。您可以查看stackoverflow.com/questions/5135889/how-to-normalize-a-sql-database以及搜索 stackoverflow - stackoverflow.com/search?q=How+to+normalize+a+SQL+Database

考虑到这一点,您的代码存在一些问题-

(1) 您在两个查询中得到相同的朋友数组。

//Friend array for logged in user
$add_friend_check = mysql_query("SELECT friend_array FROM users WHERE username='{$_SESSION['user_login']}'");
//Friend array for user who owns profile
$add_friend_check_username = mysql_query("SELECT friend_array FROM users WHERE username='{$_SESSION['user_login']}'");

您的第二个查询应该是从他们正在删除的朋友那里获取朋友数组。

$add_friend_check_username = mysql_query("SELECT friend_array FROM users WHERE username='$username'");

(2)当从他们的朋友数组中删除用户时,您使用他们自己的朋友数组

//Remove logged in user from other persons array
if (strstr($friend_array,$userComma)) {
$friend2 = str_replace("$userComma","",$friend_array);
}
else
if (strstr($friend_array,$userComma2)) {
$friend2 = str_replace("$userComma2","",$friend_array);
}
else
if (strstr($friend_array,$user)) {
$friend2 = str_replace("$user","",$friend_array);
}

您应该将它们从朋友数组中删除

//Remove logged in user from other persons array
if (strstr($friend_array_username,$userComma)) {
$friend2 = str_replace("$userComma","",$friend_array_username);
}
else
if (strstr($friend_array_username,$userComma2)) {
$friend2 = str_replace("$userComma2","",$friend_array_username);
}
else
if (strstr($friend_array_username,$user)) {
$friend2 = str_replace("$user","",$friend_array_username);
}

(3) 在完成将他们从好友数组中删除的所有工作之后,您现在将好友数组设为空

$friend2 = "";

这应该被删除。

(4) 最后,您更新 users 朋友数组两次,而不是朋友数组,当您进行第二次更新时,您将根据问题 #4 将其设为空

$removeFriendQuery = mysql_query("UPDATE users SET friend_array='$friend1' WHERE username='{$_SESSION['user_login']}'");
$removeFriendQuery_username = mysql_query("UPDATE users SET friend_array='$friend2' WHERE username='{$_SESSION['user_login']}'");

将您的第二个查询更改为 -

$removeFriendQuery_username = mysql_query("UPDATE users SET friend_array='$friend2' WHERE username='$username'");

现在,我假设

$username == the friend that you are deleting 
$user == logged-in user || $_SESSION['user_login']

因为这些已使用,但未在您的代码中定义。

另外,请注意,您不应该使用mysql_*函数编写新代码。不鼓励使用此扩展程序。相反,应该使用MySQLiPDO_MySQL扩展。另请参阅MySQL:选择 API指南和相关的常见问题解答以获取更多信息。

于 2012-11-21T02:27:33.007 回答