0

私は、ある種の作品であるアンフレンドシステムを持っています。友達解除ボタンをクリックすると、テーブルが更新され、更新した友達が削除されます。唯一の問題は、配列内の 1 つだけではなく、すべての友達を削除することです。

配列はこの友人 1、友人 2、友人 3 に似ており、友人 2 を削除したい場合、友人 1 と 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

まず、何に従うことをお勧めし、データベース構造を提案して正規化します@MarkBakerstackoverflow.com/questions/5135889/how-to-normalize-a-sql-database@nicharを見るだけでなく、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']}'");

2 番目のクエリは、削除するフレンドからフレンド配列を取得する必要があります。

$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) 最後に、友人の配列ではなく、ユーザーの友人の配列を 2 回更新しています。2 回目の更新を行うと、問題 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']}'");

2 番目のクエリを - に変更します。

$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_*。この拡張機能の使用はお勧めできません。代わりに、MySQLiまたはPDO_MySQL拡張機能を使用する必要があります。詳細については、MySQL: APIガイドの選択および関連するFAQも参照してください。

于 2012-11-21T02:27:33.007 に答える