Wie funktioniert eigentlich ein PN System ?

Wir sammeln alle Infos der Bonusepisode von Pokémon Karmesin und Purpur für euch!

Zu der Infoseite von „Die Mo-Mo-Manie“
  • Hallo,
    also ich wollte das nochmals ausführlich haben. Da ich ein PN System gerne selbst coden möchte. Tim's PN Skript ist sau gute Arbeit, dennoch hat es ein paar Fehler und Probleme gegeben. Dann kann man das schlecht in die Hoempage einbauen weil es einfach zu groß ist. Nichts für ungut Tim. Andere können was anfangen. Und ich will ja auch keine Codes kopieren, zunächst das nicht erlaubt ist und du auch nicht erfreut und dir die Mühe gemacht hast das zu coden. Erstmal Respekt an dich. :thumbsup: So zunächst einmal. Im Internet habe ich nach Tutorials gesucht die mir aber nichts erklärt haben. Bei Quaknet.de oder so, muss man mal die anderen kapitel erst durchlesen das man das alles kapiert. Steht ja auch extra da und darauf habe ich wirklich keinen Bok. Andere die sich echt eine kleine Mühe gemacht haben das zu erklären, habe ich teils nicht ganz verstanden. Naja, was solls. Da ich hier bestimmt besser drann komme um mein Problem zu lösen. Eröffne ich hier mal ein Topic. Ich weis da gab es schon sau viele Fragen hier im BisaBoard. Doch in keinem Topic wurde es ausführlich erklärt. Ich komme mal zur Sache. Was ich eigentlich wissen will wie das eigentlich mit einem PN System funktioniert. Ich "denke" und probiere gut einen Monat an einem PN System. Ich kann meine Idee die ich habe gut nachvollziehen. Also ich presentiere sie mal:


    User füllt ein Formular aus wo der Empfänger Name eingetragen wird > Das wird dann alles in eine Datenbank gespeichert (ID, Empfänger, Absender, Betreff und Nachricht) > Wenn ein user sich einloggt, wird die Session wo der Username steht der sich eingeloggt hat mit den Datensätzen aus der Datenbank überprüft. > Wenn Der Loginname dem Empfängernamen gleicht, dann wird der jenige Datensatz ausgegeben.


    Also ich kann mir ganz gut vorstellen, dass es nicht anders ist. Wie würdet denn ihr sowas Skripten. Wenn ich recht habe, bräuchte ich ein paar kleine Hilfen beim Skripten. ;)

  • Ich würde einen ähnlichen weg wählen, wie Woltlab ihn in ihrem PN System gewählt haben:
    Nicht eine Tabelle mit allen Daten, sonder zwei Tabellen. In der einen steht die Nachricht selbst, in der anderen existiert für jeden Empänger der PN ein Datensatz mit allen nötigen Infos. So kannst du auch die PN für jeden User einzeln als gelesen markieren.
    Das Auslesen kannst eigentlich so regeln. Beim Login wird auf ungelesene PNs geprüft, falls welche existieren ne entsprechende Meldung ausgeben.


    Beim Script helfen könnte ich schon. Müsstest nur mal posten, was du schon hast + den MySQL-Query, mti dem deine Tabelle erstellt wurde.

  • Ich hatte jetzt sowieso noch vor, sobald ich mein Browsergame am laufen hab, aus meiner Benutzerbasis noch nen paar Scripte zu basteln, also wird da sicher noch was kommen ^^.


    Ich könnte die theoretisch auch wohl dabei helfen.

  • könnte mir vieleicht auch jemand helfen? Den ich habe das gleiche Problem mit Tim´s System.
    Ich werde mich auch bemühen es hin zu griegen und so lerne ich vieleicht noch.

  • Genau, wir entwickeln eines. Bzw. sie helfen mir bei meinen Fehlern die auftreten. Und wir machen das glaube ich intern und ich passse es direkt an meine Homepage an. Wenn ichs kann, kann ich ja mal ein Tutorial writen. Aber das dauert eh noch ^.^

  • Also, ich habe schonmal einbisschen geskriptet:

    neue_nachricht.php

    PHP
    <?php $mysqlhost = "localhost"; // MySQL Hostname $mysqlusername = "xxx"; // MySQL Username $mysqlpasswort = "xxx"; // MySQL Passwort $mysqldb = "xxx"; // MySQL Datenbank  mysql_connect("$mysqlhost", "$mysqlusername" , "$mysqlpasswort") or die("Verbindung zur Datenbank konnte nicht hergestellt werden"); // Versucht einen Verbindung aufzubauen mysql_select_db("$mysqldb") or die ("Datenbank konnte nicht ausgewählt werden"); // Sucht die Datenbank  $benutzerid = $_SESSION["id"]; $benutzername = $_SESSION["user"]; ?>    	<form action="neue_nachricht_absenden.php" method="post">     	<table border="0" align="center">      	<tr>       	<td>Empfänger:</td>       	<td><select name="empfaenger">           	<option value="">Name des Empfängers auswählen</option>           	<?php while ($dsatz = mysql_fetch_assoc($res)) { echo '<option value="'.$dsatz["id"].'">'.$dsatz["nickname"].'</option>'; } ?>           	</select></td>      	</tr>      	<tr>       	<td>Betreff:</td>       	<td><input type="text" name="betreff"></td>      	</tr>      	<tr>       	<td>Nachricht:</td>       	<td><textarea name="nachricht"></textarea>      	</tr>     	</table><br /><br />     	<center><input type="submit" value="Absenden"></center>    	</form>


    neue_nachricht_absenden.php


    So, wie überprüfe ich mit der If-Anweisung jetzt ob die Session $_SESSION["user"] mit dem Empfänger übereinstimmt ? Und wenn die Session mit dem Empfänger übereinstimmt soll in der Datei nachricht.php die Private Nachricht ausgegeben werden. Und wenn in gelesen eine 1 steht, dann soll das Neue Nachricht: vor dem Betreff stehen. Da bin ich jetzt einbisschen überfordert...

  • mysql_connect("$mysqlhost", "$mysqlusername" , "$mysqlpasswort")

    hier kannst du die " " weglassen.. ist so auch schneller



    $datum = date(d.m.Y H:i:s);

    hier müssen " " hin ;) oder auch ' ', was schneller ist



    echo "Versendet"; $eintrag = "INSERT INTO comunity_pn (absender, empfaenger, betreff, datum, nachricht, gelesen) VALUES ('$absender', '$empfaenger', '$betreff', '$datum', '$nachricht', '0')"; $eintragen = mysql_query($eintrag);

    da müssen mysql_real_escape_string rum, sonst kann jeder böse mit ein paar kenntnissen damit machen, was er will :)
    und ich würde die meldung obs versendet wurde oder nicht vom ergebnis abhängig machen ;)


    die datenbankstrucktur würde ich verändern.
    erstmal müssen da zwecks löschen etc. IDs hin..


    dann würde ich wie Leon auch schon gesagt hat eine extra tabelle mit allen texten anlegen. dort kannst du jeden inhalt mit einer ID hinterlegen und dann im eigentlichem PN-Datensatz diese ID angeben.


    spart auch platz wenn man PNs an mehrere versendet ;)
    und sofern man pns vor dem lesen des empfängers noch bearbeiten kann, kann man den text auf einen schlag bei allen bearbeiten..


    Edit: In manchen Forensystemen werden 2 Datensätze angelegt.. Einen für den Absender und einen für den Empfänger.. Allerdings kann man das so auch gut lösen :)

    :thumbsup:

    Yeah, hatte grade meinen 256. Beitrag :D Beim 512. wird dann aber richtig gefeiert :D

    Einmal editiert, zuletzt von Chris! ()

  • Das ist mir jetzt einbisschen komplex. Ich weis immernoch nciht wie ich das realisieren kann. Und ich mach das nur mit einer Tabelle vorsichtshalber. das mit dem Datum kann ich verstehen. Das hab ich vergessen. Das mit $mysqlname usw. Das mach ich einfach so. So, ich bräuchte jetzt nur noch einen Code der das ausgibt...

  • Soll es doch komplex werden, wir sind ja da ;)


    Ich würd gern mal ein PN-System schreiben, indem es einzelne Postfächer gibt, die in einer n:m Beziehung den Usern zugewiesen werden können. (Das bedeutet ein Postfach für 4 User, Einzelpostfächer, etc..)

  • Hab ja nich gesagt, dass ich das schreiben muss..


    So wie du Vorschläge hinnimmst ist ja auch klar, dass du nix lernst ;)


    Ja mach das 'Meister'. Immerhin können nicht alle so'toll' sein wie du, und wenn du Vesprit nicht helfen willst, sondern uns hier nur demonstrieren willst wie toll du das alles kannst, kannst du das auch gerne lassen, den das intresiert hier wirklich keinen. Also ich würde das so i-wie machen:


    Ist das was du willst? So hab ich das zumindest verstanden.