Social Media vriendenlijst
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?
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.
- UserID (jijzelf)
- UserID_friend
- Status (bijv. een E_NUM met 'pending', 'accepted', 'blocked')
Gewijzigd op 04/09/2015 14:44:34 door - Ariën -
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.
An tje op 04/09/2015 16:01:40:
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?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);
?>
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.
Toevoeging op 04/09/2015 18:14:49:
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.
Toevoeging op 04/09/2015 18:29:41:
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'."
Toevoeging op 04/09/2015 18:32:28:
De tabelnaam is de naam vd gebruiker, al heb ik inmiddels zelf twijfels of dat wel handig is.
Quote:
"Warning: mysqli_error() expects exactly 1 parameter, 0
Punt.
- 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.
- Aar - op 04/09/2015 18:48:12:
- Voor elke regel een echo openen is niet echt efficiënt.Je kan grote blokken HTML prima buiten je PHP-blok uitvoeren.
Daarbij zou ik willen voorstellen dat je je code in twee delen gaat hakken:
Deel 1 - PHP programma
Deel 2 - de output:
Code (php)
Toevoeging op 04/09/2015 19:17:58:
- 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.
Gewijzigd op 04/09/2015 19:16:13 door Frank Nietbelangrijk
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 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>";
}
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>";
}
Twig kunnen gebruiken.
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 Quote:
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:
Wat impliceert dat dit hetzelfde betekent als:
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:
Voor beide gevallen heb je aan twee kolommen genoeg.
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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);
?>
// 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:
Code (php)
1
2
3
4
2
3
4
Username| Username_id | Username_Friend | Username_Friend_id
--------+-------------+-----------------+-------------------
Jan | 1 |Gerrit | 3
Klaas | 2 |Hans | 4
--------+-------------+-----------------+-------------------
Jan | 1 |Gerrit | 3
Klaas | 2 |Hans | 4
Gewijzigd op 09/09/2015 11:06:50 door bart de kinkelaar