Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] MySQL-PHP Freundschaftssystem

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] MySQL-PHP Freundschaftssystem

    Hallo

    Ich bin schon seit langem auf der suche und habe schon getestet ob ich eins selber gescriptet bekommen. Wurde leider nichts. Könnt ihr mir eine Seite sagen oder ein Code geben mit dem ich das Schaffen würde?

  • #2
    Bloß keine Details verraten!

    Kommentar


    • #3
      hä? wie kann ich das verstehen? :/

      Kommentar


      • #4
        So ein Freundschaftssystem ist ja kein genormtes Schema.

        Kommentar


        • #5
          aber könnt ihr mir vlt. sagen wie ich das am besten umsetze?

          Kommentar


          • #6
            Tabelle User
            user_id | vorname
            1 | Hans
            2 | Peter

            Tabelle Freundschaften
            user_id | considers_as_friend
            1 | 2

            Bedeutet: Der User Hans zählt Peter zu seinen Freunden, Peter würde die zwischenmenschliche Beziehung aber nicht auf dieser Ebene ansiedeln.
            [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
            [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

            Kommentar


            • #7
              Oder aus considers_as_friend wird friend_id und Peter wird zur Freundschaft einfach gezwungen Denn ansonsten müsste man zusätzlich ein Nachrichtensystem bemühen. Der Threadersteller dürfte mit seiner Hauptaufgabe bereits ausreichend beschäftigt sein.

              @MarkusN99: Du könntest deinen Code posten. Auch wenn er wie du andeutest nichts taugt, vielleicht können wir dir sagen, was dort fehlt oder falsch gemacht wurde.

              Kommentar


              • #8
                also ich habe eine tabelle die wie folgt aussieht:

                UID_1 | UID_2
                1 | 2
                2 | 1
                1 | 3
                3 | 1

                Dann habe ich diese MySQL abfrage:
                Code:
                		$db_link = mysqli_connect (
                							 DB_HOST, 
                							 DB_USER, 
                							 DB_PASS, 
                							 DB_NAME
                							);
                		$my_id = $_SESSION['UID'];
                		$sql = "
                		SELECT *
                		FROM friends
                		LEFT JOIN user_info ON friends.UID_1 = user_info.UID
                		WHERE friends.UID_1 = $my_id or friends.UID_2 = $my_id
                		";
                		$db_erg = mysqli_query( $db_link, $sql );
                		if ( ! $db_erg )
                		{
                		  die('Ungültige Abfrage: ' . mysqli_error());
                		}
                		$n = 0;
                		while ($zeile = mysqli_fetch_array( $db_erg, MYSQLI_ASSOC))
                		{
                			if($zeile['username'] != $_SESSION['username']) {
                es müsste doch eig. einfacher gehen das man nicht immer die Freunde zweimal eintragen muss.

                Kommentar


                • #9
                  Ja, wie monolith schon sagte, wenn die Freundschaft immer beidseitig gelten soll, reicht ein Wertepaar in der Tabelle. Hier kommen dann deine Anforderungen und Erwartungen ins Spiel. Ohne Infos kann man nur raten.
                  [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                  [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                  Kommentar


                  • #10
                    Ich würde vorraussichtlich das mit den Benachrichtugen schaffen nur bei dem Freundschaft-system mit dem "Beantworten" und "Ablehnen" habe ich schwierigkeiten.

                    Kommentar


                    • #11
                      Keine Ahnung welche Benachrichtigungen du meinst. Erkläre bitte mal ausführlicher was du planst und an welcher Stelle du gerade Schwierigkeiten hast.

                      Wenn ich dich jetzt richtig verstanden habe, könntest du noch eine Tabelle "Freundschaftsanfragen" erstellen, die würde genauso aussehen wie die Freunde-Tabelle, also einfach 2 User-IDs.
                      In der Applikation kannst du dann einfach abfragen, ob der User noch eine Freundschaftsanfrage beantworten muss.
                      Nimmt er die Anfrage an, wird der Wertepaar aus der Tabelle "Freundschaftsanfragen" in die Tabelle "Freunde" eingetragen.
                      Wird die Anfrage abgelehnt, kannst du entweder einen Flag an den Datensatz in der Tabelle "Freundschaftsanfragen" setzen, oder den Datensatz einfach entfernen.


                      edit: nvm den ersten Absatz, gerade nochmal die Posts hier gelesen, got it.
                      [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                      [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                      Kommentar


                      • #12
                        Ich habe schwierigkeiten bei der sql abfrage aktuell habe ich ja immer:
                        Code:
                        WHERE friends.UID_1 = $my_id or friends.UID_2 = $my_id
                        und dann immer 1 entfernt weil ja 2 Ergebnisse ausgeliefert werden.

                        Könnte man das einfacher machen da ich aktuell in der Datenbank immer 2-mal die gleichen einträge habe nur einmal ist User1 bei UID_1 auf der seite eingetragen und einmal ist User1 bei UID_2 eingetragen.

                        Kommentar


                        • #13
                          Naja, brauchst du denn das OR? Wenn du die Freundschaften von User mit ID 1 suchen willst reicht doch:
                          Code:
                          WHERE friends.UID_1 = 1
                          [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                          [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                          Kommentar


                          • #14
                            aber wann ist wenn der andere die Anfrage gestellt hat und seine ID in der UID_1 steht und nicht meine dann klappt das ja nicht.
                            Oder seh ich das falsch?

                            Kommentar


                            • #15
                              Ich hab jetzt mal ein kleines Szenario mit Beispielabfragen durchgespielt, keine Ahnung ob was für dich dabei ist, sollte aber für einen Denkanstoß reichen.

                              Datenbank:

                              Tabelle User
                              user_id | vorname
                              1 | Hans
                              2 | Peter
                              3 | Jack

                              Tabelle Anfragen
                              user_id(Fremdschlüssel user_id aus User) | to_add(Fremdschlüssel user_id aus User) | status (enum[open, accepted, declined])

                              Tabelle Freunde
                              user_id(Fremdschlüssel user_id aus User) | friend(Fremdschlüssel user_id aus User)

                              Szenario 1
                              Regeln:
                              - Der Vorgang des Befreundens wird durch eine Anfrage gestartet
                              - Wird die Anfrage angenommen, gilt die Freundschaft beidseitig (wie ichs mitgekriegt habe ist es ja bei dir so)

                              Ablauf:
                              - Hans sendet eine Freundschaftsanfrage an Peter
                              Code:
                              INSERT INTO Anfragen (user_id, to_add, status) VALUES (1,2, 'open');
                              - Peter besucht die Website, ihm soll angezeigt werden, wer ihm eine Freundschaftsanfrage gesendet hat
                              Code:
                              SELECT Anfragen.user_id, User.vorname 
                              FROM Anfragen 
                              INNER JOIN User ON Anfragen.user_id = User.user_id 
                              WHERE Anfragen.to_add = 2 AND Anfragen.status = 'open';
                              - Peter kann die Anfrage jetzt annehmen oder ablehnen
                              Code:
                              -- annehmen
                              INSERT INTO Freunde (user_id, friend) VALUES (1, 2);
                              UPDATE Anfragen SET status = 'accepted' WHERE user_id = 1 AND to_add = 2;
                              
                              -- ablehnen
                              UPDATE Anfragen SET status = 'declined' WHERE user_id = 1 AND to_add = 2;
                              - Peter überlegt, ob er nicht schon genug Freunde hat und lässt sich erstmal seine Freundschaften anzeigen
                              Code:
                              SELECT User.user_id, User.vorname, 'gefragt worden' AS how 
                              FROM Freunde 
                              INNER JOIN User ON Freunde.user_id = User.user_id
                              WHERE Freunde.friend = 2 
                              UNION 
                              SELECT User.user_id, User.vorname, 'gefragt' AS how 
                              FROM Freunde 
                              INNER JOIN User ON Freunde.friend = User.user_id
                              WHERE Freunde.user_id= 2;
                              Durch die Flags in der Tabelle "Anfragen" könnte man die Tabelle "Freunde" eigentlich weg lassen, aber ich würde die Anfragen-Tabelle lieber noch als Historie verwenden, wer hat wem wie oft eine Anfrage geschickt, nach dem wievielten mal wurde sie angenommen etc.
                              [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
                              [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

                              Kommentar

                              Lädt...
                              X