Ik ben bezig met een social media site te maken.
Nu wil ik de vrienden van een specifieke gebruiker kunnen opslaan en kunnen weergeven op de site, waarbij de gebruiker zelf ook dmv een button een bepaalde andere gebruiker kan toevoegen als vriend.

Wat is de beste manier om vrienden van een gebruiker op te slaan, bv. in Phpmyadmin?
Mijn code Bart, is een stapje voorwaarts in logisch en gestructureerd programmeren. Ik probeer je dus een paar hints te geven om je code beter te maken. Hierbij hoef je niet direct te denken in een ander resultaat maar moet je denken aan de leesbaarheid en de mate van aanpasbaarheid van je code. Stel, je hebt twintig pagina's waarin je die host, database, username en password geschreven hebt. Nu wil je over een half jaar verhuizen naar een andere webhost omdat je niet tevreden bent over je huidige webhost. Jij weet zelf al niet meer welke bestanden die gegevens allemaal instaan en je moet dan op zoek gaan. De kans dat je er één vergeet aan te passen of een spellingfout maakt in één van de bestanden is erg groot geworden. Daarnaast heb je er zowiezo meer werk aan. Dan over de HTML. Je bent nu erg bezig om de website WERKEND te krijgen. Straks is dat klaar. Vervolgens kom je er achter dat de layout wel beter had gekund en wil je de HTML gaan veranderen. Op dit moment krijg je veel last van je eigen code omdat je HTML (output) en code niet van elkaar gescheiden hebt gehouden. Om nog een stapje verder te gaan zou je je HTML zelfs beter in een apart bestand kunnen zetten. en zou je nog beter een template engine zoals Twig kunnen gebruiken.
Dat kan, maar een vriendschap moet ook wederzijds kunnen zijn.

Je kunt met twee kolommen werken op basis van twee principes:

1.) als een combinatie van twee namen voorkoment dat is per definitie de vriendschap wederzijds, bijvoorbeeld omdat het woord het impliceert, dan is het bidirectioneel
Voorbeeld:

Naam | Bevriend met
-----+-------------
 Jan | Klaas

Wat impliceert dat dit hetzelfde betekent als:

  Naam | Bevriend met
-------+-------------
 Klaas | Jan

2.) je zou er ook vanuit kunnen gaan dat iemand aan iemand vriendschap verklaart heeft, in dat geval kan je het als unidirectioneel zien, en zou als een vriendschap wederzijds is de combinatie een tweede keer andersom in de tabel moeten voorkomen.
Bijvoorbeeld:

Naam  | Bevriend met
------+-------------
  Jan | Klaas
Klaas | Jan

Voor beide gevallen heb je aan twee kolommen genoeg.
Het is inmiddels gelukt om De vrienden van een specifieke gebruiker te weergeven.
Wat nog niet lukt is het maken van de mogelijkheid om een persoon toe te voegen aan je vrienden. Daar ga ik nog mee aan de slag en kom ik op terug.
De code:

mysqli_select_db($con, 'sfriends') or die ("Unable to select database!"); 
// Create query 
$query = "Select * FROM vriendschappen WHERE Username_id=$id";
// execute query
$result = mysqli_query($con,$query) or die ("Error in query: $query. ".mysqli_error()); 
// see if any rows were returned 
if (mysqli_num_rows($result) > 0) {  
    echo "<table border=2 height=80px width=300px>";  
    while($row = mysqli_fetch_array($result))      {
echo "<tr>";
echo "<td style='background-color:#1975FF'><h4><b><center>Naam vriend:</center></b></h4></td>";
echo "</tr>";
echo "<tr>";
echo "<td style='background-color:#6685A3'><h4><b><center><a style='text-decoration: none; color:red' href='friendss.php?id=" . $row['Username_id'] . "'>" . $row['Username_friend'] . "</a></center></b></h4</td>";
echo "</tr>";

}
echo "</table>";
} 
else { 
    // no 
    // print status message 
    echo "No rows found!"; 
}

// free result set memory 
mysqli_free_result($result); 
mysqli_close($con);
?>

De phpmyadmin tabel:

Username| Username_id | Username_Friend | Username_Friend_id
--------+-------------+-----------------+-------------------
  Jan   | 1           |Gerrit           | 3
  Klaas | 2           |Hans             | 4

Reageren