Social Media vriendenlijst

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bart de kinkelaar

bart de kinkelaar

04/09/2015 14:12:00
Quote Anchor link
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?
 
PHP hulp

PHP hulp

28/03/2024 17:13:30
 

04/09/2015 14:15:15
Quote Anchor link
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.
 
- Ariën  -
Beheerder

- Ariën -

04/09/2015 14:44:00
Quote Anchor link
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')
Gewijzigd op 04/09/2015 14:44:34 door - Ariën -
 

04/09/2015 16:01:40
Quote Anchor link
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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

04/09/2015 17:33:23
Quote Anchor link
Misschien ook wat lezen over (My)SQL? linkje
 
- Ariën  -
Beheerder

- Ariën -

04/09/2015 17:39:33
Quote Anchor link
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.
 
Bart de kinkelaar

bart de kinkelaar

04/09/2015 18:14:03
Quote Anchor link
Dit is de pagina voor het weergeven van alle vrienden van de gebruiker:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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.

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.
 
DavY -

DavY -

04/09/2015 18:40:59
Quote Anchor link
Quote:
"Warning: mysqli_error() expects exactly 1 parameter, 0


Punt.
 
- Ariën  -
Beheerder

- Ariën -

04/09/2015 18:48:12
Quote Anchor link
Even een aantal tips:

- 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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

04/09/2015 19:12:14
Quote Anchor link
- 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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php

// variabelen declareren
// hier een query
// en een if - else

?>


Deel 2 - de output:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<html>
    <body>
        <h1><?php echo $title; ?></h1>
        <p>
            <?php
            foreach($rows as $row) {
                echo $row['id'] . '<br>';
            ?>

        </p>
    </body>
</html>


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
 
Bart de kinkelaar

bart de kinkelaar

05/09/2015 17:04:15
Quote Anchor link
De mysql error is weg. Dat in ieder geval.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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>";
}

Afbeelding
 
Frank Nietbelangrijk

Frank Nietbelangrijk

06/09/2015 12:18:27
Quote Anchor link
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.
 

06/09/2015 15:44:30
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
Naam | Bevriend met
-----+-------------
 Jan | Klaas

Wat impliceert dat dit hetzelfde betekent als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
  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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
Naam  | Bevriend met
------+-------------
  Jan | Klaas
Klaas | Jan

Voor beide gevallen heb je aan twee kolommen genoeg.
Gewijzigd op 06/09/2015 15:46:07 door
 
Bart de kinkelaar

bart de kinkelaar

09/09/2015 11:03:55
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
Username| Username_id | Username_Friend | Username_Friend_id
--------+-------------+-----------------+-------------------
  Jan   | 1           |Gerrit           | 3
  Klaas | 2           |Hans             | 4
Gewijzigd op 09/09/2015 11:06:50 door bart de kinkelaar
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.