PN schicken wie bei woltlab burning board

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

  • PN schicken wie bei woltlab burning board

    Hallo, ich würde mich für den prinziepiellen Aufbau von einem bulettin board interessieren. Bei so einem Forum hat man normalerweise die Möglichkeit einem User eine Pn (Private Nachricht) zu schicken. Ich habe mir mal gedanken gemacht, wie man so was realisieren könnte, wenn man selbst eine Art Portal/Forum erstellt hat. Was ich nun wissen möchte ist, ob man folgende Lösung realisieren könnte, oder ob es was besseres gibt.

    Ich habe mir das so vorgestellt, das es 2 tabellen gibt die wie folgt aussehen.

    tabelle inbox
    sendername, Betreff, Mail,Datum



    tabelle outbox,
    Empfängername, Betreff, Mail, DAtum,


    In der Tabelle outbox wird die nachricht in der outbox des entsprechenden senders abgespeichert. Dies wird gemacht, damit der User weiss, was er versendet hat. Die gleiche Nachricht wird dann in der Inbox des Users gespeichert, der die Mail empfänngt. Ist doch eigentlich ganz einfach.
    Ich habe mir das so vorgestellt, das diese Tabellen, jeweils nur ein mal erstellt werden und nicht für jeden einzelnen user. Wenn nun der user paulus dem user petrus eine PN schicken möchte, wird die Nachricht einmal in die outbox von paulus gespeichert und einmal in die inbox von petrus.
    da es noch mehr user als diese beiden gibt, müsste man dann eine Abfrage programmieren. Wenn der user Paulus seine inbox abruft wird
    dann so was wie das folgende ausgeführt. select * from inbox where username =Paulus. Ich kenne mich leider mit der sql und PHP syntax nicht so aus, aber das Prinzip ist schon klar.

    Kann man die Tabellen noch irgendwie besser gestalten?
    Sollte man eventuell eine ID als Primärschlüssel hinzufügen oder brauch man das nicht?

    grüße
    zabarax

  • #2
    aehm ....
    wie waers es mit einer tabelle ...
    wo du einfach beides speicherst ...

    also du machst in der tabelle ein feld mit dem ders bekommt und ein feld von wem es kommt ...

    anders denke ich waers es verschwendung ...

    wahrscheinlich kommste jetzt mit dem argument, das beim ersten loeschen das weg waer ...
    kannste verhindern indem du dem empfänger/versender noch jeweils ein feld schenkst in dem du speicherst ob er es geloescht hat ... nur wenn beide geloescht haben netfernst den datensatz ...

    gruss
    iglo

    Kommentar


    • #3
      warum das ganze nicht in eine tabelle ???


      id emfänger absender text gelesen order


      was will man mehr
      thx Mukraker

      Kommentar


      • #4
        Tabelle pms:

        pm_id, pm_to, pm_from, pm_time, pm_text, pm_folderid, pm_isread


        Tabelle pmfolders:

        folder_id, folder_userid, folder_titel


        Der User ruft dann alle PMs auf welche zu ihm geschickt worder (pm_to = userid) oder welche von ihm weggeschickt worden sind (pm_from = userid)

        Das mit den Folders ist nur extrazeug, brauch einem eigentlich nicht zu interessieren, ist das wenn man das ganze schon ein bisschen erweitern will


        MfG Floriam
        PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

        Kommentar


        • #5
          Original geschrieben von kapitaeniglo
          aehm ....
          kannste verhindern indem du dem empfänger/versender noch jeweils ein feld schenkst in dem du speicherst ob er es geloescht hat ... nur wenn beide geloescht haben netfernst den datensatz ...

          gruss
          iglo
          Ja, das ist eine gute Idee.
          Aber noch ne Frage zum WBB zu Floriam, freu mich auch auf jeden anderen der antworet.

          Was steht in der pm id?
          bekomt da jede Nachricht eine eindeutige ID, die man mit autoincrease oder wie das heisst hochzählt?
          Was geschieht, wenn man diese Id weglässt?
          Überschreibt der dann Nachrichten?
          Ist diese ID dann so was wie ein Primärschlüssel?


          gruß
          Martin

          Kommentar


          • #6
            ja
            wenn du INSERT machst, überschreibst du nichts, solltest s ne spalte aber trotzdem drinhaben
            nein
            ja
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Ok, vielen dank

              Kommentar


              • #8
                Original geschrieben von mrhappiness
                ja
                wenn du INSERT machst, überschreibst du nichts, solltest s ne spalte aber trotzdem drinhaben
                nein
                ja
                Bist du heute ein bisschen wortkarg?
                PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

                Kommentar


                • #9
                  Original geschrieben von Floriam
                  Bist du heute ein bisschen wortkarg?
                  ja
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    Was mich jetzt noch interessieren würde, bzw was ich vergessen habe zu Fragen, ist die Sache mit dem lesen/gelesen der Nachricht. Wird das so gemacht, das wenn man auf den Link klickt, im querrystring einen Wert übertragen wird, der die entsprechende Stelle in der db von FALSE auf TRUE setzt?
                    Oder kann man das auch anders machen?
                    Habt ihr eventuell einen Link für mich, wie das mit dem querrystring geht?

                    grüße

                    zabarax

                    Kommentar


                    • #11
                      Du machst ne beliebige Url z.B.

                      PHP-Code:
                      [url]www.bla.de/blabla?id=1&isread=true[/url]

                      //Auslesen:

                      echo $_GET['id'];
                      echo 
                      $_GET['isread'
                      Die Parameter baust du in ein SQL Statment ein und updatest das Feld isread mit true......

                      Klar ?
                      [color=blue]MfG Payne_of_Death[/color]

                      [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
                      [color=red]Merke:[/color]
                      [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

                      Murphy`s Importanst LAWS
                      Jede Lösung bringt nur neue Probleme
                      Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
                      In jedem kleinen Problem steckt ein großes, das gern raus moechte.

                      Kommentar


                      • #12
                        Original geschrieben von Floriam
                        ...pm_isread...

                        Ich zitier mich mal selber.

                        Die Zeile kann 3 Werte haben:

                        1 für ist gelesen
                        -1 für ungelesen
                        0 für selbst abgeschickt, man will ja seine eigenen Nachrichten nicht mitzählen lassen
                        PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

                        Kommentar


                        • #13
                          Danke mal, ich habe das mit diesem Querrystring nie ganz kapiert.
                          Was geschieht, wenn der user auf diesen Link klickt?

                          Ich denke, das bei der Nachricht mit der ID 1 der isread wert (typ bool)
                          auf true gesetzt wird.
                          so ist es doch, oder?

                          Im Posteingang des Users, wo man die subjects sieht, kann man dann z.B
                          abfragen, bei welchen Nachrichten der isreadwert false ist, also ungelesen.
                          Wenn der isreadwert auf false steht, wird dann das subject, empfänger etc
                          FETT gedruckt. Wenn der Wert auf true also gelesen steht, wird der Empfänger subject etc mit normaler Schrift angezeigt.

                          Ich denke diese Unterscheidung fett/nicht fett sieht man bei web.de. Gleichzeitig könnte man dann ja noch abfragen, bei wievielen messages der isreadwert auf false steht um dem user anzuzeigen, wieviele neue messages er in seiner Inbox hat.


                          Doch was ist die ID?
                          Wozu muss/sollte ich überhaupt eine ID verwenden?
                          Das Problem was ich mit der ID sehe ist folgendes. Wenn jede Nachricht
                          über eine ID zu identifizieren ist, woher soll die Datenbank dann wissen,
                          welche ID die nachricht bekommt, die ich verschicken will? Muss ich die letzte ID auslesen, um eins inkrementieren und dann in die neue Zeile der Tabelle schreiben, sobald user Paul eine neue Nachricht schreibt, oder kann man das mit autoinc automatisch machen?

                          Was geschieht wenn die Nachricht mit der ID 4 gelöscht wird?
                          Dann habe ich Nachrichten mit den IDs 1,2,3 und 5 bis sagen wir mal 100.
                          Das Probelem was ich daran sehe ist, das Irgendwann
                          immer mehr Löscher in den Käse kommen und am schluss der Datentyp zu klein ist, bei mehreren millionen Nachrichten. Nein ich will kein Web.de nachprogrammieren!
                          Gibt es überhaupt eine möglichkeit, diese ID Problem zu beseitigen?

                          grüße
                          zabarax

                          Kommentar


                          • #14
                            Hallo, hat jemand eine Idee, wie ich das Id Problem lösen kann
                            Eventuell jeden Datensatz eins zurück nach hinten schieben?
                            Gibt es da keine bessere Lösung?
                            Oder bevor eine Nachricht eine ID zugewiesen wird, erstmal abcheken, welceh IDs noch frei sind? und dann eine zuweisen?
                            Beide Lösungen sind mit Aufwand verbunden.
                            Gibt es da kein standart Algo oder so was für?


                            Sorry, ich komme aus dem C programmierbereich und kenne mich noch nicht
                            mit SQL und PHP ganz aus

                            Kommentar


                            • #15
                              das id-problem ist kein problem, deshalb bedarf es auch keiner lösung ...
                              stells einfach auf autoincrement und gut ist ... ob da nun "löcher" sind oder
                              nicht, ist vollkommen wurscht und bei einer spalte id INT(10) musst du
                              schon ne menge pm's schreiben und löschen, bevor mysql am ende ist.
                              die id ist "nur" dein eindeutiger bezeichner eines datensatzes.

                              vielleicht startest du erstmal mit was einfachem ... den tuts von
                              www.schattenbaum.net zB, danach ein gb in php/mysql
                              bevor du dir mit nem addon fürs wbb die ohrläppchen brichst
                              Kissolino.com

                              Kommentar

                              Lädt...
                              X