Freundschaftssystem

  • Hey Leute,

    ich versuche derzeit ein Freundschaftssystem mit MySQL zu basteln ..
    Wenn der USER 1 beim USER 2 auf "Freundschaft" klickt,
    so sollen in die Datenbank bei userone 1 und bei usertw 2 und der status 1 rein.
    Nach der Bestätigung von USER 2 soll der Status auf 2 sein.
    Nun habe ich jedoch ein Problem.
    Ich möchte prüfen ob die Mitglieder bereits befreundet sind.
    Wenn sie bereits befreundet sind sollen neue Freundschaftsanfragen von den gleichen Usern natürlich nicht zulässig sein.
    Ebenso soll der Profilinhalt erst angezeigt werden, sobald USER 1 und USER 2 eine eingetragene Freundschafts mit dem Status 2 führen ..

    Ich habe sogut wie alles versucht was mir dazu einfällt..
    Ich habe es mit

    PHP
    $slcfriends = mysql_query("SELECT COUNT FROM `friends` WHERE `userone`='".$id."' AND `usertwo`='".$userid['id']."' AND `status`='2'", $db);
    $slcswitch = mysql_query("SELECT COUNT FROM `friends` WHERE `userone`='".$userid['id']."' AND `usertwo`='".$id."' AND `status`='2'", $db);
    $checkr = mysql_fetch_assoc($slcfriends);
    $checks = mysql_fetch_assoc($slcswitch);
    if (($checkr != '0') OR ($checks != '0')) {
    echo 'profilzeigen / keine neuen möglichen freundeseinladungen';
    }
    else {
    echo 'nicht befreundet';
    }

    probiert. Funktioniert nicht.

    warum ich bei den WHERE-Klauseleln die Variablen escaped habe liegt daran,
    wenn ich es nicht getan habe bekam ich eine fehlermeldung das die variablen falsch escaped wurden .. :s

    dann habe ich es auch noch so probiert:

    PHP
    $slccheck = mysql_query("SELECT `userone`, `usertwo` FROM `friends`", $db);
    $check = mysql_fetch_assoc($slccheck);
    if (($check['userone'] == $id) AND ($check['usertwo'] == $userid['id']) OR ($check['usertwo'] == $id) AND ($check['userone'] == $userid['id'])) {
             echo 'Bereits befreundet.';
    }
    else {
             $inserrequest = mysql_query("INSERT INTO `friends`(`userone`, `usertwo`, `status`) VALUES ('".$id."', '".$user['id']."', 1)", $db) or die (mysql_error());
             header('Location: /./user/index.php?id='.$id.'');
         }


    Wer kann mir helfen ?
    Auch mysql_num_rows() habe ich nicht ausgelassen und ich habe jeweils alle Varianten durchgeschaut.
    Die Datenbankverbindung stimmt auch und wenn ich mit jemanden befreundet bin und dann nochmal neu einlade
    wird der eintrag nocheinmal vorgenommen oder es steht von vorne rein dort das ich bereits mit dem user befreundet bin.

    Ich weiß nicht mehr weiter :s
    Wäre lieb wenn mir jemand einen kleinen Denkanstoß gibt. . :s

    Einmal editiert, zuletzt von Bleistift (18. Mai 2012 um 20:52)

  • Und wenn man einen dritten Freund haben will, gibt es einen userthree? Kann nicht dein Ernst sein, oder? Ich würde sagen, deine DB-Struktur solltest du nochmal gut überdenken

  • Ist eigentlich so aufgebaut das das Chema wie folgt weiter läuft
    sagen wir USER 1 ist mit USER 2,3,4 befreundet und USER 2 mit 4,5 würde das so aussehen:

    [TABLE='width: 500, align: center']

    [tr][td]

    userone

    [/td][td]

    usertwo

    [/td][td]

    status

    [/td][/tr][tr][td]

    USER 1

    [/td][td]

    USER 2

    [/td][td]

    2

    [/td][/tr][tr][td]

    USER 1

    [/td][td]

    USER 3

    [/td][td]

    2

    [/td][/tr][tr][td]

    USER 1

    [/td][td]

    USER 4

    [/td][td]

    2

    [/td][/tr][tr][td]

    USER 2

    [/td][td]

    USER 4

    [/td][td]

    2

    [/td][/tr][tr][td]

    USER 2

    [/td][td]

    USER 5

    [/td][td]

    2

    [/td][/tr]


    [/TABLE]

    kein `userthree`
    Desswegen will ich ja auch sozusagen mysql_num_rows oder COUNT anwenden mit der WHERE.
    Dachte das erschließt sich 8|

  • Das kann nicht sein!

    Richtig debuggen

    • Man bemerkt, dass ein Skript nicht das tut, was es soll.
    • Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(E_ALL);
    • Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
    • Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    • An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysql_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
    • Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    • Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    • Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    • Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.