kostenloser Webspace werbefrei: lima-city


Friend system

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    ffs2309

    ffs2309 hat kostenlosen Webspace.

    Hallo Community,
    Ich versuche ein kleines Soziales Netzwerk zu programmieren, nur ich habe momentan ein Problem :
    Ein Freundesystem , was ich mich jetzt Frage ist wie ich es lösen kann. ich wollte es um es sicher zu machen
    alles über PHP bzw. MySQL laufen lassen nur ist mein Problem das anfrage System, wie soll ich es regeln das PHP
    eine zeile als anfrage und eine als Person die anfragt erkennt bzw. anfrage von Freundschaft unterscheidet
    Währe über Vorschläge/Hilfe sehr dankbar

    Mfg. FFS2309
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. sonok

    Moderator Kostenloser Webspace von sonok

    sonok hat kostenlosen Webspace.

    In dem Du Freunde in der MySQL-Datenbank zB über die ID der registrierten Nutzer abspeicherst und abfragst.
  4. g****e

    Am einfachsten: Die User haben IDs, und dann haste ein Table der enthält:
    | ID | UserID | FriendUserID |
    Wobei die ID eine eindeutige Identifikation der Zeile entspricht, UserID ist die ID desjenigen, der den Freund hat, und FriendUserID ist die ID des Freundes. Dabei können so auch Abos umgesetzt werden, also einseitige Freundschaften.

    Liebe Grüße
  5. Autor dieses Themas

    ffs2309

    ffs2309 hat kostenlosen Webspace.

    Danke für die Vorschläge ich versuch es mal so um zu setzen da hab ich noch ne Frage : Soll ich das so umsetzen das ich Friend ID mit der ID Des gerade angemeldeten benutzers vergleichen und nen boolen bzw. text wert überprüfen der angbit ob es eine Anfrage oder eine Abgeschlossene Freundschaft ist ?

    Mfg. FFS2309
  6. Ich würde es so machen:

    (angenommen, deine Tabelle heisst 'friendships')
    TAbelle sollte so aufgebaut sein:

    ID | user_id | friend_id | friendship_accepted
    ----------------------------------------------------------

    friendship_accepted => 1 / 0 jenachdem ob es eine Anfrage ist (0) oder eine bestätigte Anfrage, d.h. Freundschaft (1) ist

    <?php
    
    $user_id = 'id des users';
    $friend_id = 'id des Freundes';
    
    $result = mysql_query("SELECT friendship_accepted FROM friendships 
    WHERE user_id = '".$user_id."' AND friend_id = '".$friend_id."' ");
    
    $friendship = mysql_fetch_object($result);
    if(!mysql_num_rows($result)){
      //Weder Freundschaft noch Anfrage
    }elseif($friendship->friendship_accepted){
      //Freundschaft
    }else{
      // Anfrage
    }
    
    
    ?>



    MFG
  7. Ein komplettes Freundesystem als Erweiterung von mir für PHP-Fusion geschrieben findest du unter http://www.phpfusion-support.de/infusions/fusion_downloads/dl_details.php?dl_id=200

    Wenn du das ganze entpackst öffne die infusion.php dort findest du den DB Aufbau.
  8. Ich würde gleich die ID als user id nehmen ^^

    ID | requests | friends
    -------------------------------

    Requests sind die Anfragen, Beispiel:

    User 1 = id->1
    User 2 = id->2
    User 3 = id->3
    User 4 = id->4

    User 1 und 3 erhalten eine Anfrage von User 2 und sind mit user 4 schon befreundet:

    ID | requests | friends
    -------------------------------
    1-|-------2-------|------4--------|
    2-|---------------|---------------|
    3-|-------2-------|------4--------|
    4-|---------------|-------1,3-------|

    Erscheint mir eigentlich am einfachsten ^^
  9. kill-a-teddy schrieb:
    Ich würde gleich die ID als user id nehmen ^^

    ID | requests | friends
    -------------------------------

    Requests sind die Anfragen, Beispiel:

    User 1 = id->1
    User 2 = id->2
    User 3 = id->3
    User 4 = id->4

    User 1 und 3 erhalten eine Anfrage von User 2 und sind mit user 4 schon befreundet:

    ID | requests | friends
    -------------------------------
    1-|-------2-------|------4--------|
    2-|---------------|---------------|
    3-|-------2-------|------4--------|
    4-|---------------|-------1,3-------|

    Erscheint mir eigentlich am einfachsten ^^


    Ich kann nicht ganz verstehen, wieso er das jetzt so gestalten soll.
    Dadurch, dass jeder User alle seine Freunde jetzt in einem feld hat ist die Abfrage 1) komplizierter und 2) ist die Datenbankstruktur dadurch meiner Ansicht nach nicht sehr Ordentlich.

    Ich denke für schnelle Abfragen (eben auch nach einzelnen Usern / Freunden / Stati) ist es einfacher jeder Verbindung eine Zeile einzuräumen, zumindest in diesem (kleinen) Modell.

    MFG
  10. kill-a-teddy schrieb:
    Ich würde gleich die ID als user id nehmen ^^

    ID | requests | friends
    -------------------------------

    Requests sind die Anfragen, Beispiel:

    User 1 = id->1
    User 2 = id->2
    User 3 = id->3
    User 4 = id->4

    User 1 und 3 erhalten eine Anfrage von User 2 und sind mit user 4 schon befreundet:

    ID | requests | friends
    -------------------------------
    1-|-------2-------|------4--------|
    2-|---------------|---------------|
    3-|-------2-------|------4--------|
    4-|---------------|-------1,3-------|

    Erscheint mir eigentlich am einfachsten ^^


    Bitte nicht...
    Eine zusätzliche Hilfstabelle nur um Freundschaften zu speichern ist, um es einfach zu sagen, dafür da, diese mit genauen Daten "vollzuballern" (mir ist kein besseres Wort eingefallen)
    Ich weiß garnicht wie ich persönlich ein Komma in der friends Spalte umsetzen sollte, auf jeden Fall ist es nicht im Sinne einer solchen Hilfstabelle, zumal man für das benannte Beispiel vom teddy nicht einmal eine Hilfstabelle bräuchte, falls dies so überhaupt funktioniert

    Aber zur Lösung selbst brauch ich glaube nichtsmehr zu sagen, meine Vorposter haben schon die Richtigen Denkanstöße gegeben :thumb:
  11. copynpaste schrieb:
    Bitte nicht...
    Eine zusätzliche Hilfstabelle nur um Freundschaften zu speichern ist, um es einfach zu sagen, dafür da, diese mit genauen Daten "vollzuballern" (mir ist kein besseres Wort eingefallen)
    Ich weiß garnicht wie ich persönlich ein Komma in der friends Spalte umsetzen sollte, auf jeden Fall ist es nicht im Sinne einer solchen Hilfstabelle, zumal man für das benannte Beispiel vom teddy nicht einmal eine Hilfstabelle bräuchte, falls dies so überhaupt funktioniert

    Aber zur Lösung selbst brauch ich glaube nichtsmehr zu sagen, meine Vorposter haben schon die Richtigen Denkanstöße gegeben :thumb:


    Da hast du mich falsch verstanden oder ich mich schlecht ausgedrückt... Hier mal ein Beispiel:

    So wird das aufgerufen (Ich hab jetzt meine fertige Klasse benutzt)
    <?php $test = $content->getFriendRequest();
    foreach ($test as $value){
    	echo 'Freundschafts-Anfrage von'.$value;
    }
    ?>


    Dann wird sql so abgefragt:
    function getFriendRequest(){
    		$sql = "
    		SELECT		`request`
    		FROM 		`testuser`
    		";
    		$result = Database::query($sql);
    		$data = Database::getObjectList($result);
    		return $data;
    	}


    Und die Datenbank sieht so aus:
    Link zum Bild


    ####'
    Auf die Art und Weise hast du auch Sicherheit, mittels "trim", was einfach anzuwenden ist kannst du die Daten einzeln holen, wenn du suchst einfach Prozent-Zeichen benutzen, zum Beispiel
    "SELECT * FROM TEST WHERE `name` LIKE  `'%'.mysql_real_escape_string($eingabe).'%'`"


    Du hast somit eine einzige Tabelle, wo lediglich zwei Spalten ergänzt werden, um das komplette Freunde- System zu verwallten ^^


    Ich würde sogar soweit gehen, zu behaupten, dass das weniger Datenlastig ist bei großen Projekten mit X-Hundert freunden, da nur ein einziger Eintrag durchsucht wird und nicht eine komplette Tabelle ^^

    Beitrag zuletzt geändert: 13.11.2012 8:00:05 von kill-a-teddy
  12. Die Funktion
    getObjectList()
    ist aber keine der Standardfunktionen, oder? In der Dokumentation ist sie nämlich nicht enthalten...
    Die trennt einfach die Requests an den Kommata, oder was macht die?
  13. tobiworlds schrieb:
    Die Funktion
    getObjectList()
    ist aber keine der Standardfunktionen, oder? In der Dokumentation ist sie nämlich nicht enthalten...
    Die trennt einfach die Requests an den Kommata, oder was macht die?


    Zitat von mir selbst:

    (Ich hab jetzt meine fertige Klasse benutzt)


    getObjectList() ist selbstverständlich keine php klasse, sondern eine die ich mir für meine Projekte Local geschrieben habe. Daweil kann ich sie leider nicht posten, da ich nicht an meinem Rechner bin...

    Grob gesagt sie ließt die Einträge in ein array und gibt das dann wieder ^^ $data wird in x- verschiedenen Projekten verwendet.

    Beitrag zuletzt geändert: 13.11.2012 19:20:46 von kill-a-teddy
  14. Ich habe selber bereits erfolgreich ein soziales Netzwerk programmiert.
    Das mit den Freundschaftssystem ist ein wenig knifflich, ich habe es so gemacht:

    ich habe eine Freundschaftstabelle mit den Spalten freund1, freund2

    Bei einer Freundschaft ist jeweils freund1 man selbst und freund2 ist der befreundete User,
    das geht auch andersrum. Das musst du einfach im Profil abrufen.
  15. Autor dieses Themas

    ffs2309

    ffs2309 hat kostenlosen Webspace.

    programtools schrieb:
    Ich würde es so machen:

    (angenommen, deine Tabelle heisst 'friendships')
    TAbelle sollte so aufgebaut sein:

    ID | user_id | friend_id | friendship_accepted
    ----------------------------------------------------------

    friendship_accepted => 1 / 0 jenachdem ob es eine Anfrage ist (0) oder eine bestätigte Anfrage, d.h. Freundschaft (1) ist

    <?php
    
    $user_id = 'id des users';
    $friend_id = 'id des Freundes';
    
    $result = mysql_query("SELECT friendship_accepted FROM friendships 
    WHERE user_id = '".$user_id."' AND friend_id = '".$friend_id."' ");
    
    $friendship = mysql_fetch_object($result);
    if(!mysql_num_rows($result)){
      //Weder Freundschaft noch Anfrage
    }elseif($friendship->friendship_accepted){
      //Freundschaft
    }else{
      // Anfrage
    }
    
    
    ?>



    MFG

    So das hört sich gut an nur habe ich noch ne Frage :
    ich brauch ja auch die ID des freundes nur woher bekomme ich die ich habe mir das so überlegt nur weiß ich ob das geht :

    SELECT FriendID FROM Tabelle WHERE UserID LIKE $userid

    Das wäre doch eig. möglich oder ?
    sonst ist das ziehmlich schwer da ich ja irgendwo die ID her brauch ;)

    Mfg FFS2309
  16. wie meinst du das?

    Für mein Beispiel muss sowohl Freund als auch User ID bekannt sein, da du ja die bezihung zwischen beiden herausbekommen möchtses.
    Möchtest du anhand einer user_id alle Freunde ausgeben lassen?

    MFG
  17. Autor dieses Themas

    ffs2309

    ffs2309 hat kostenlosen Webspace.

    programtools schrieb:
    wie meinst du das?

    Für mein Beispiel muss sowohl Freund als auch User ID bekannt sein, da du ja die bezihung zwischen beiden herausbekommen möchtses.
    Möchtest du anhand einer user_id alle Freunde ausgeben lassen?

    MFG

    Ja ich hatte vor alle Freunde auszulesen FB like die lesen das auch aus ner DB aus und ich denke nicht grad anders als es hier beschrieben wird , also wollte ich die FreundID auslesen lassen
  18. Das sollte gehen, auch wenn ich nicht weiß, wie jetzt Dein restliches System aussieht nach all den Vorschlägen...
  19. Ja klar, das ist kein Problem.

    Deine Tabelle sieht ja so aus:

    ID | user_id | friend_id | friendship_accepted
    ----------------------------------------------------------

    Du brauchst also alle user, deren id bei friend_id eingetragen ist, wo die user_id gleich des users ist UND die Anfrage aktzeptiert wurde.

    Beispiel für alle Freunde eines Users:

    <?php
    
    $user_id = 'id des users';
    
    $result = mysql_query("SELECT friend_id FROM friendships 
    WHERE  friendship_accepted  = '1'
    AND user_id = '".$user_id."' );
    
    
    while($friendship = mysql_fetch_object($result)){
    
      //friendship->friend_id entspricht der Id des n-ten Freundes
    
    }
    
    ?>
  20. Autor dieses Themas

    ffs2309

    ffs2309 hat kostenlosen Webspace.

    programtools schrieb:
    Ja klar, das ist kein Problem.

    Deine Tabelle sieht ja so aus:

    ID | user_id | friend_id | friendship_accepted
    ----------------------------------------------------------

    Du brauchst also alle user, deren id bei friend_id eingetragen ist, wo die user_id gleich des users ist UND die Anfrage aktzeptiert wurde.

    Beispiel für alle Freunde eines Users:

    <?php
    
    $user_id = 'id des users';
    
    $result = mysql_query("SELECT friend_id FROM friendships 
    WHERE  friendship_accepted  = '1'
    AND user_id = '".$user_id."' );
    
    
    while($friendship = mysql_fetch_object($result)){
    
      //friendship->friend_id entspricht der Id des n-ten Freundes
    
    }
    
    ?>

    Ja das würde gehen nur das accepted = 1 will ich ja nicht direkt da ich ja auch die sehen will denen eine anfrage gestellt wurde,
    wobei ich denke das ich die mit 0 ausfiltern könnte , das würde theoretisch klappen wenn ich da nichts falsch verstehe, also ungefähr so :
    <?php
    
    $user_id = 'id des users';
    
    $result = mysql_query("SELECT friend_id FROM friendships 
    WHERE  friendship_accepted  = '1'
    AND user_id = '".$user_id."' );
    
    
    while($friendship = mysql_fetch_object($result)){
    
      //friendship->friend_id entspricht der Id des n-ten Freundes
    
    }
    
    $result2 = mysql_query("SELECT friend_id FROM friendships 
    WHERE  friendship_accepted  = '0'
    AND user_id = '".$user_id."' );
    
    
    while($friendship = mysql_fetch_object($result1)){
    
      //friendship->friend_id entspricht der Id des n-ten Freundes dem eine anfrge gestellt wurde
    
    }
    ?>

    Oder verstehe ich da was falsch ?

    Mfg FFS2309
  21. Wenn Du die Einträge in der Tabelle erst erzeugst, wenn eine Anfrage gestellt wird, dann funktioniert Dein Code vom Prinzip her. Ob er auch praktisch keine Fehler enthält, kannst Du ja leichter selbst prüfen.
  22. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!