webForumDet fria alternativet

har lite problem med borttagning av vänenr i min kod hjälp?

PHP

8 svar · 715 visningar · startad av Mycodez

Medlem sedan feb. 2010445 inlägg
Frågan#1

Hej
jag har tidigare varit här med lite fel i samma system jag har kodat men nu så här jag hållit på med att man ska ge användarna möjligheterna att ta bort sina vänner som man inte vill ha kvar. men nu e det så att jag inte löser vad som e felet i detta. den vill inte ta bort att man e vänner länge
vad e felet

if ($_POST["request"] == "removeFriendship") {
	
	$mem1 = preg_replace('#[^0-9]#i', '', $_POST['mem1']); // Person doing the friendship remove
    $mem2 = preg_replace('#[^0-9]#i', '', $_POST['mem2']);  // Person being removed
	//
	if (!$mem1 || !$mem2 || !$thisWipit) {
		echo  'Error: Missing data';
    	exit(); 
	}
	//
	$decryptedID = base64_decode($_SESSION['id']);
	$id_array = explode("p3h9xfn8sq03hs2234", $decryptedID);
	$mem1SessIDX = $id_array[1];
	if ($mem1SessIDX != $mem1) {
    	exit();
	}
    // Query mem1 and mem2 friend_array out of DB
	$sql_frnd_arry_mem1 = mysql_query("SELECT friend_array FROM user WHERE id='$mem1' LIMIT 1"); 
	$sql_frnd_arry_mem2 = mysql_query("SELECT friend_array FROM user WHERE id='$mem2' LIMIT 1"); 
	while($row=mysql_fetch_array($sql_frnd_arry_mem1)) { $frnd_arry_mem1 = $row["friend_array"]; }
	while($row=mysql_fetch_array($sql_frnd_arry_mem2)) { $frnd_arry_mem2 = $row["friend_array"]; }
	// Check to see they are in fact each other's friends
	$frndArryMem1 = explode(",", $frnd_arry_mem1);
	$frndArryMem2 = explode(",", $frnd_arry_mem2);
    if (!in_array($mem2, $frndArryMem1)) { echo  'This member is not in your list'; exit(); }
	if (!in_array($mem1, $frndArryMem2)) { echo  'This member is not in your list'; exit(); }
	
	// Here we remove them from each other's arrays using "unset" on the key where the value is found
	foreach ($frndArryMem1 as $key => $value) {
			  if ($value == $mem2) {
			      unset($frndArryMem1[$key]);
			  } 
    }
	foreach ($frndArryMem2 as $key => $value) {
			  if ($value == $mem1) {
			      unset($frndArryMem2[$key]);
			  } 
    } 
	// Now implode the adjusted arrays to make them strings again before going into the database
	$newStringForMem1 = implode(",", $frndArryMem1);
    $newStringForMem2 =  implode(",", $frndArryMem2);
	// And now update their database fields
	$sql = mysql_query("UPDATE user SET friend_array='$newStringForMem1' WHERE id='$mem1'");
	$sql = mysql_query("UPDATE user SET friend_array='$newStringForMem2' WHERE id='$mem2'");
	echo 'You are no longer friends with this member.';
    exit(); 
}

denna php funktion eller vad man nu ska kalla det anropas av lite java eller JQery vet inte riktigt skillnaden mellan dem (A) och javan elelr vad det nu e anropas av php kod.
phjp koden ser ut

        <div class="interactContainers" id="remove_friend">
			<div align="right">
        		<a href="#" onclick="return false" onmousedown="javascript:toggleInteractContainers('remove_friend');">Stäng</a>
        	</div>
        	Är du säker på att du vill ta bort <?php print $username; ?> som vän?&nbsp;
            <a href="#" onclick="return false" onmousedown="javascript:removeAsFriend(<?php echo $_SESSION['id']; ?>, <?php echo $id; ?>);">Ja</a>
            <span id="remove_friend_loader"><img src="images/loading.gif" width="28" height="10" alt="Loading" /></span>
        </div>

och detta e javan eller jQuery

// Friend removal stuff
function removeAsFriend(a,b) {
	$("#remove_friend_loader").show();
	$.post(friendRequestURL,{ request: "removeFriendship", mem1: a, mem2: b, thisWipit: thisRandNum } ,function(data) {
	    $("#remove_friend").html(data).show().fadeOut(12000);
    });	
}

Snälla hjälp mig med detta (A)

förvirrad nybörjade på php (A)
/Robin k
BTw vill ni följa min utveckling kolla på in www.blabster.nu inte helt färdig men det utvecklas så fort som det går man måste ju förstå vad man kodar:)

// Robin K

Medlem sedan jan. 2005953 inlägg
#2

Jag tycker att du har tänkt lite galet när du har gjort din databasstruktur.
Istället för att ha en kolumn för varje användare med dennes vänner, så tycker jag att du ska ha en separat tabell för vänskapsrelationer mellan olika användare. Det kommer underlätta väldigt mycket för dig tror jag.

Medlem sedan feb. 2010445 inlägg
#3

metalboy skrev:

Jag tycker att du har tänkt lite galet när du har gjort din databasstruktur.
Istället för att ha en kolumn för varje användare med dennes vänner, så tycker jag att du ska ha en separat tabell för vänskapsrelationer mellan olika användare. Det kommer underlätta väldigt mycket för dig tror jag.

Men hur hade du gjort detta?

Medlem sedan feb. 20005 891 inlägg
#4

Jag hade gjort en tabell med användare, med unik primärnyckel, sen eftersom varje användare har en M:N-relation till varandra, en separat tabell med bara "relationer", t.ex

Nån sorts pseudokod, för att sätta upp tre användare och göra "Anton" till en av "Jonathans" polare:


	*UKEY |	USER_NAME	|	USER_EMAIL
	-------------------------------------------
	1     |	Jonathan	|	jonathans@email.com
	2     |	Anton		|	anton@klanton.se
	3     |	Per-Erik	|	perik@perik.com
	

	*FKEY	|	USER	|	FRIEND
	--------------------------------------
	1	|	1	|	2
Medlem sedan feb. 2010445 inlägg
#5

Förstår inte riktig vad du menar med koden @casca

Medlem sedan feb. 20005 891 inlägg
#6

Mycodez skrev:

Förstår inte riktig vad du menar med koden @casca

Min "pseudokod" är alltså för att beskriva databasens struktur. Utgick från metalboys inlägg.

Hur ser databastabellen ut som du använder nu?

Medlem sedan feb. 2010445 inlägg
#7

Jag har då 4 olika tabeller Blabbing (gör så folk kan skriva statusar och så ) friend_request (som skickar vänförfrågningar), news (nyheterna) och user (användarna)

Dem viktigaste e nog user och friend_request

User ser ut såhär
id (primär nyckel med Auto_increment) int
firstname text
lastname text
email varchar(150)
username varchar(25)
password varchar(100)
dob date
randomnummer int(100)
activate int(1)
regday date
admin int(1)
friend_array text

Tabellen friend_request ser ut såhär
id (primär nyckel med Auto_increment) int
mem1 int
mem2 int
timedate datetime (får att se när vänförfrågan kom in)

hoppas det är till hjälp

Medlem sedan feb. 2010445 inlägg
#8

Finns det något enklare sätt att göra det på?? i såfall hur???

Medlem sedan feb. 20034 441 inlägg
#9

Mycodez skrev:

Finns det något enklare sätt att göra det på?? i såfall hur???

Ja! Läs vad dom andra skriver:

metalboy skrev:

Jag tycker att du har tänkt lite galet när du har gjort din databasstruktur.
Istället för att ha en kolumn för varje användare med dennes vänner, så tycker jag att du ska ha en separat tabell för vänskapsrelationer mellan olika användare. Det kommer underlätta väldigt mycket för dig tror jag.

casca skrev:

Jag hade gjort en tabell med användare, med unik primärnyckel, sen eftersom varje användare har en M:N-relation till varandra, en separat tabell med bara "relationer", t.ex

Nån sorts pseudokod, för att sätta upp tre användare och göra "Anton" till en av "Jonathans" polare:


	*UKEY |	USER_NAME	|	USER_EMAIL
	-------------------------------------------
	1     |	Jonathan	|	jonathans@email.com
	2     |	Anton		|	anton@klanton.se
	3     |	Per-Erik	|	perik@perik.com
	



	*FKEY	|	USER	|	FRIEND
	--------------------------------------
	1	|	1	|	2

Alltså, du skapar en tabell enligt ovan, med fälten:

FriendKey (int), primary key
User (int)
Friend (int)

Precis som casca säger, för att lägga till en vän:

INSERT INTO Friends
(User, Friend)
VALUES
(
<UserId_för_den_som_är_inloggad>,
<ID_för_användaren_man_vill_lägga_till>
);

...för att hämta "dina" vänner:

SELECT a.id, a.username
FROM user a
INNER JOIN Friends b
ON a.id = b.Friend
WHERE b.User = <UserId_för_den_som_är_inloggad>;
271 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)