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?
?
Onbekende gebruiker
04-09-2015 14:15
PHPmyadmin is een tool (website) om de MySQL database te beheren.
Je slaat dus alles op in MySQL en niet PHPmyadmin.
Maar het maakt niet uit waar je het opslaat, kan ook MongoDB zijn, deze is gebaseerd op NO-SQL.
Dus hebt h
geen relaties e.d met tabellen.. Volgens mij heb je helemaal geen tabellen.
Opslaan kan prima in MySQL. Ik denk dan aan een tabel friendships, met daarin 3 velden:
- UserID (jijzelf)
- UserID_friend
- Status (bijv. een E_NUM met 'pending', 'accepted', 'blocked')
?
Onbekende gebruiker
04-09-2015 16:01
Je zou een tabel kunnen maken met daarin 2 kolommen. In de eerste kolom de naam van degene die de vrienden heeft, en in de tweede kolom de naam met wie die een vriend is.
Je zou een tabel kunnen maken met daarin 2 kolommen. In de eerste kolom de naam van degene die de vrienden heeft, en in de tweede kolom de naam met wie die een vriend is.
Dat kan, maar een vriendschap moet ook wederzijds kunnen zijn.
Dit is de pagina voor het weergeven van alle vrienden van de gebruiker:
<?php
if(isset($_GET['id']))
{
$id = intval($_GET['id']);
// getting info from db
}
// set database server access variables:
$host = "localhost";
$user = "root";
$pass = "superbart";
$db = "sfriends";
// open connection
$con=mysqli_connect($host, $user, $pass) or die ("Unable to connect!");
// select database
mysqli_select_db($con, 'sfriends') or die ("Unable to select database!");
// Create query
$query = "SELECT * FROM sfriends WHERE Userid=$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:</center></b></h4></td>";
echo "</tr>";
echo "<tr>";
echo "<td style='background-color:#6685A3'><h4><b><center>" . $row['Userid_friend'] . "</center></b></h4</td>";
echo "</tr>";
echo "<tr>";
echo "<td style='background-color:#1975FF'><h4><b><center>Emailadres:</center></b></h4></td>";
echo "</tr>";
echo "<tr>";
echo "<td style='background-color:#6685A3'><h4><b><center>" . $row['email'] . "</center></b></h4</td>";
echo "</tr>";
echo "<tr>";
echo "<td style='background-color:#1975FF'><h4><b><center>Favoriete game:</center></b></h4></td>";
echo "</tr>";
echo "<tr>";
echo "<td style='background-color:#6685A3'><h4><b><center>" . $row['game'] . "</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);
?>
In de database heb ik nu een database genaamd sfriend met een tabel met daarin
Userid
Userid_friend
Ten eerste: De select query geeft een fout.
Ten 2e: kan je verduidelijken hoe ik kan zorgen dat als Gebruiker A (userid 1), gebruiker B (userid 2) wilt toevoege, ik het via een Sql-query voor elkaar krijg dat bij userid 1, userid 2 als userid_friend staat.
[size=xsmall]Toevoeging op 04/09/2015 18:14:49:[/size]
De tabel in de code moet je niet helemaal op letten, die is gepakt van andere eigen pagina, dat hij Email & Game niet vind is niet de SQL query fout die ik bedoel.
[size=xsmall]Toevoeging op 04/09/2015 18:29:41:[/size]
de Sql error is
"Warning: mysqli_error() expects exactly 1 parameter, 0 given in C:\xampp\htdocs\.... on line 19
Error in query: SELECT FROM sfriends WHERE Userid = '3'."
[size=xsmall]Toevoeging op 04/09/2015 18:32:28:[/size]
De tabelnaam is de naam vd gebruiker, al heb ik inmiddels zelf twijfels of dat wel handig is.
- Een foutafhandeling met die() is niet netjes. Zie ook deze tutorial.
- Op lijn 17 raad ik aan om je variabele buiten quotes te halen.
- Inline-CSS is niet aan te bevelen. Gebruik een CSS-stijlblad.
- Voor elke regel een echo openen is niet echt efficiënt.Je kan grote blokken HTML prima buiten je PHP-blok uitvoeren.
[size=xsmall]Toevoeging op 04/09/2015 19:17:58:[/size]
- Zet je hostname, database-naam, username en password in een apart configuratie bestand. (Dan voorkom je tevens dat je het per ongeluk online zet :p)
- Het connect-en met de database zou je beter in een custom function kunnen zetten die ook weer in een apart bestand staat.
Nu lukt het nog niet om ervoor te zorgen dat hij de vrienden van gebruiker A in een tabel weergeeft zonder A zelf te weergeven. Daarnaast Frank, zou je je code kunnen uitleggen?
Het gaat nog altijd om dit deel, en dan vooral om de sql query.
// select database
mysqli_select_db($con, 'sfriends') or die ("Unable to select database!");
// Create query
$query = "SELECT DISTINCT a.Userid, a.Userid_friend, b.username FROM bert AS a
INNER JOIN users AS b
WHERE Userid = '$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:</center></b></h4></td>";
echo "</tr>";
echo "<tr>";
echo "<td style='background-color:#6685A3'><h4><b><center><a href='friendss.php?id=" . $row['Userid_friend'] . "'>" . $row['username'] . "</a></center></b></h4</td>";
echo "</tr>";
}
echo "</table>";
}
De twee databases die genoemd worden in de Sql query
[size=xsmall]Toevoeging op 05/09/2015 17:05:32:[/size]
De databases
[size=xsmall]Toevoeging op 05/09/2015 17:06:41:[/size]
[size=xsmall]Toevoeging op 05/09/2015 17:07:07:[/size]