Tabelle auf doppelte Einträge prüfen und entsprechend handeln

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

  • Tabelle auf doppelte Einträge prüfen und entsprechend handeln

    Hoi Hoi,

    ich bin gerade dabei,für meine Forenuser eine Möglichkeit zu programmieren,einzelne Themen zu bookmarken.

    Dazu habe ich eine neue Tabelle mit Namen "bookmarks" angelegt.
    Diese hat die Zeilen "user_id" und "topic_id",ich denke es ist klar für was
    die beiden Einträge stehen.

    Das Einfügen in die DB klappt reibungslos,doch ab da gibt es Probleme:

    natürlich soll der User ein Thema nicht doppelt bookmarken können,zudem
    sollte sich der Textlink "Thema bookmarken" natürlich sofern der User das Thema gebookmarked hat in "Bookmark für dieses Thema löschen" wandeln.

    Ich hab versucht,mit COUNT an die ganze Sache ranzugehen:

    Code:
    //
    // Prüfen,ob das Thema schon gebookmarked worden ist
    //
    $sql = "SELECT user_id, topic_id, count(topic_id) as counttopics
    FROM phpbb_bookmarks
    WHERE user_id = $userid
    AND topic_id = $topicid
    GROUP BY user_id";
    mysql_query($sql);
    
    $counttopics = $row['counttopics'];
    echo $counttopics; // Zum Test
    	
    if ($counttopics != 0)
    {
    echo "Thema bereits gebookmarked";
    }
    else
    {
    //
    // Thema noch nicht in der DB...einfügen bitte!
    //
    $sql = "INSERT INTO phpbb_bookmarks (user_id, topic_id) VALUES ($userid, $topicid)";
    mysql_query($sql); 
    echo "Thema in DB eingefügt";
    echo $counttopics;
    }
    doch die Themen kann man (leider) mehrmals pro User in die DB einfügen...


  • #2
    wo kommt denn $row auf einmal her? kein wunder dass $counttopics immer 0 ist.

    Kommentar


    • #3
      $row ist der DB-Array:

      Beispiel:

      Username aus der DB abfragen:
      SELECT username
      FROM phpbb_users
      WHERE user_id = x

      Username des Users mit der ID x ausgeben:
      $row['username'];

      Kommentar


      • #4
        1. warum selectest du user_id, topic_id, obwohl du sie schon kennst?

        2. warum GROUP BY user_id?

        3. WHERE user_id = $userid AND topic_id = $topicid liefert dir entweder 1 oder keinen datensatz. wie kommst du darauf, dass es mehr sein könnten?

        4. dementsprechend erübrigt sich das count(topic_id)

        5. da du weißt, dass es max. 1 eintrag gibt, kannst du auch ein limit einsetzen, was das ganze beschleuniugen sollte.

        6. woher hast du $row? Wohl wieder ein Copy+Paste fummler, wa?

        Kommentar


        • #5
          $row ist der DB-Array
          NEIN!!! Kennst deinen eigenen Quelltext nicht!

          Kommentar


          • #6
            ne warte mal...das erste war falsch...aber wenn ich das so versuche...

            Code:
            while ( $row = $db->sql_fetchrow($result) )
            { 
            $counttopics = $row['counttopics'];
            echo $counttopics;
            }
            funzt das ebensowenig

            Kommentar


            • #7
              @ tobiaz

              das Problem ist ja,dass es gerade maximal einen Eintrag geben soll...klickt man jetzt aber dreimal auf den "Bookmark"-Link gibts auch dementsprechend drei Einträge

              Kommentar


              • #8
                wozu bitte ne while-schleife, wenn es nur einen datensatz geben kann??

                hast du meine tipps mal befolgt??

                warum sehe ich da keine testausgaben??

                Kommentar


                • #9
                  @ tobiaz

                  das Problem ist ja,dass es gerade maximal einen Eintrag geben soll...klickt man jetzt aber dreimal auf den "Bookmark"-Link gibts auch dementsprechend drei Einträge
                  das solltest du vielleicht mal prüfen, BEVOR du in die Datenbank schreibst. Es gibt so sachen wie UNIQUE-Keys...

                  Kommentar


                  • #10
                    hoi nochmal...

                    so jetzt geht alles...Bookmarks hinzufügen und löschen!

                    danke,

                    Johny

                    Kommentar


                    • #11
                      so easy!

                      Kommentar

                      Lädt...
                      X