PN-System

Kategorien: PHP & MySQL
13 Antworten
Spike_php
Spike_php am Dienstag, 19. April 2005 um 19:49
hoi leutz, ich hab eschon viele newssystem mit rechtsystem und multiuser system usw. gemacht forum auch, bloß ich weiß absolut icht wie ich ein pn system realisieren soll, was ist zu beachten wie muss man anfangen, ist des fast so wie bei einem news system oder gb?

Kommentare

azz
azz am Dienstag, 19. April 2005 um 20:25

joa, habe zwar noch nie eines geschrieben

aber ich denke das bei deiner community jeder sein eigenes profil hat, da machste halöt link pn dann input felder etc ganz normal und dann wird die nachricht inna table gespeichert mit der user id des useres von wem sie ist und an wen,
und dann lässte halt immer abfragen
select * from pn where id = '$own_id'
um alle anzuzeigen und
das die halt angezeigt werden, und dann musste halt mit cookies arbeiten das die wenn sie new sind extra angezeigt sind, oder du haust nen php counter rein, und wenn der == "1" hat isser als gelesen makiert und das wird asuh in die table eingetragen, und dann wird sie normal angezeigt

also
select * from pn where id = '$own_id' && seen = '1'

ist evtl net die eleganterste lösung sollte aber funzen, wenn du meinen text net verstanden hast einfach melden dann schreib ich den nochmal in ruhe : )

Spike_php
Spike_php am Mittwoch, 20. April 2005 um 15:07

jo jetzt habe ich bissel einblick und weiß denk ich mal wie ich des machen muss, vielen dank

azz
azz am Mittwoch, 20. April 2005 um 15:08

jau jau kein prob :)

evo
evo am Mittwoch, 20. April 2005 um 19:16

Ich hätte jetzt gesagt du musst die auswählen wo die EmpfängerID mit der UserID übereinstimmt ;) Ungelesen und ungelesen mit 1 bzw. 0 abspeichern :)

Ein Postausgang kannst du realisieren indem du die SenderID auch speicherst beim "verschicken" der PN :)

crassity
crassity am Mittwoch, 20. April 2005 um 19:34

Ich bin grad dabei ein Community System zu programmieren, ein PN System gehört da ja auch zu. Ich hab meins mit der folgenden SQL Tabelle realisiert.

1. pnid = id zum identifizieren der pn
2. to_uid = empfänger
3. from_uid = absender
4. title = titel der pn
5. message = text der pn
6. readed = wurde die pn gelesen
7. time = zeit,datum usw.
8. typ = entwurf, gesendet oder empfangen
9. reply = auf pn geantwortet
10. forward = weitergeleitet

Ich denke mal zum Programmieren selber muss ich nicht mehr viel sagen. Hoffe ich konnte dir einen kleinen denkanstoss geben.

azz
azz am Mittwoch, 20. April 2005 um 19:55

ahjo stimmt, posteingang ausgang archiv gesendet weitergeleitet etc gibts ja auch noch etc. table is net schlecht :)

creationX
creationX am Freitag, 22. April 2005 um 10:11

Hallo,

vielleicht reicht dir das hier:

<?php CREATE TABLE `pm` ( `id` int(11) NOT NULL auto_increment, `vonid` int(11) NOT NULL default &#039;0&#039;, `zuid` int(11) NOT NULL default &#039;0&#039;, `timestamp` timestamp(14) NOT NULL, `text` text NOT NULL, `titel` varchar(100) NOT NULL default &#039;&#039;, `gelesen` int(1) NOT NULL default &#039;0&#039;, PRIMARY KEY (`id`)) TYPE=MyISAM; ?>



zuid = zu welchem user soll die Pm geschickt werden
vonid = Von welcher Person die PM kam
timestamp speichert die zeit, wann die Pm abgeschickt wurde
text speichert den text der Pm
titel speicher den Titel der Pm und
gelesen speichert, ob der User die PM gelesen hat oder nicht.

Vorüberlegungen:
Nun haben wir unsere Datenbank ja schon einmal. Nun brauchen wir noch ein Script, die uns mit der datenbank verbindet, ein script welches den User erlaubt, PMs zu schreiben, und zu lesen.

db.php auf diese gehe ich nicht näher ein
php:

<?$db_host = "localhost"; //Dein Server (normalerweise immer localhost)$db_user = "username"; //User-name der Datenbank$db_pass = "passwort"; //Passwort der datenbank$db_name = "loginscript"; //Datenbankname// Nun werden wir uns mit der Datenbank verbinden:mysql_connect("$db_host","$db_user","$db_pass") or die ("Keine Verbindung moeglich");mysql_select_db("$db_name") or die("Die Datenbank existiert nicht");?>




pmwrite.php
Die datei erlaubt den User, eine PM zu schreiben. Ich gehe davon aus, dass ihr die User-id des users habt, der grade eingeloggt ist! Die variable zuid wurde bei mir so dekladiert, dass mein einen Link anklicke muss, der bei mir hiess: Diesem User eine PM schicken, und einen Link hatte zu "pmwrite.php?zuid=$zuid"
php:

<?include("db.php"); // die datenbank wird hier "includet"$user_id = $_SESSION[&#039;id&#039;]; //dass müsste ihr warscheinlich ändern, jenachdem wie ihr die user_id rausfindet$zuid= $_GET[&#039;zuid&#039;]; ?>



Jetzt brauchen wir ein Formular, welches dem user erlaubt, eine PM zu schreiben. Meins hatte 2 Felder, einmal ein feld mit name="titel" und eins mit name="text" (ich hoffe mal, dass ihr die gleichen Feldnamen benutzt wie ich ;) ). Auf jedenfall muss das Formular so anfangen:

<form action="pmwrite.php?section=abschicken" method="post"> ...


Wie ihr euer Formular aufbaut, ist euch überlassen, hauptsache ist ihr beachtet die 2 feldnamen und das form-action.
php:

if(!isset($_GET[&#039;section&#039;]) == "") $section = "";else $section = "$_GET[&#039;section&#039;]";$titel= $_POST[&#039;titel&#039;];$text = $_POST[&#039;text&#039;];if($section == ""){?>... euer formular ...<?}if($section == "abschicken") //Das Formular wurde abgesendet{



Hier könnt ihr jetzt noch eine Abfrage machen, ob alle Felder ausgefüllt worden sind, ich alss das aber mal aus.
php:

<?php mysql_query("INSERT INTO pm (zuid, vonid, titel, text) VALUES (&#039;$zuid&#039;, &#039;$user_id&#039;, &#039;$titel&#039;, &#039;$text&#039;)");echo "Vielen Dank, ihr Pm wurde erfolgreich abgeschickt";}?>



So, die pmwrite.php ist nun fertig

pms lesen
auf meiner Seite hatte ich einen Link, der so aussah: "Sie haben [0] neue Private Nachrichten"
Wie macht man so einen Link? Das geht mit folgendem Code:
php:

<?include("db.php");$user_id = $_SESSION[&#039;id&#039;];$num = mysql_num_rows(mysql_query("SELECT * FROM pm WHERE gelesen = &#039;0&#039; and zuid = &#039;$userid&#039;"));if($num == "") $num = "0";echo "<a href="readpm.php">Sie haben [$num] neue Private Nachrichten</a>";?>




Wie ihr seht, verlinkt der Link auf die readpm.php, also kommt jetzt die

readpm.php
Als erstes gebe ich eine Liste aus, mitden ganzen pm's die der user hat, und zwar so:
php:

<?<?include("db.php");$user_id = $_SESSION[&#039;id&#039;];if(!isset($_GET[&#039;id&#039;])) $id == "";if($id == "") {$query = mysql_query("SELECT titel, id, text FROM pm WHERE gelesen = &#039;0&#039; and zuid = &#039;$userid&#039;");$num = mysql_num_rows($query);if($num == "") {$num = "0";echo "sie haben keine pms";}else {while($r=mysql_fetch_object($query)) {echo "<a href="readpm?id=$r->id">$r->titel</a>";}} ?>



So, jetzt habe wir die Liste, und jetzt kommen wir zu (verinfachten) Ausgabe der PM:
php:

<?php else {$r = mysql_fetch_row(mysql_query("SELECT titel, text FROM pm WHERE id=&#039;$id&#039; and zuid=&#039;$user_id&#039;"));mysql_query("UPDATE pm Set gelesen=&#039;1&#039; WHERE id=&#039;$id&#039; and zuid=&#039;$user_id&#039;");echo "Titel: $r[0]";echo "<br>Text: $r[1]";}?>




mysql_fetch_row gibt ein array zurück, wo $r[0] den Wert angibt, welches man nach Select als erstes Feld angegeben aht (hier titel), $r[1] gibt das zweite Feld aus, ...

Das wars auch schon, ist zwar ein sehr vereinfachtes Tutorial, aber man kann darauf aufbauen.

azz
azz am Freitag, 22. April 2005 um 12:16

servas, is ma sau nice das tutorial finde ich, kannst ja gleich noch als tutorial in die db eintragen lassen : )

Spike_php
Spike_php am Freitag, 22. April 2005 um 16:17

Original von creationX:
Hallo,

vielleicht reicht dir das hier:

<?php CREATE TABLE `pm` ( `id` int(11) NOT NULL auto_increment, `vonid` int(11) NOT NULL default &#039;0&#039;, `zuid` int(11) NOT NULL default &#039;0&#039;, `timestamp` timestamp(14) NOT NULL, `text` text NOT NULL, `titel` varchar(100) NOT NULL default &#039;&#039;, `gelesen` int(1) NOT NULL default &#039;0&#039;, PRIMARY KEY (`id`)) TYPE=MyISAM; ?>



zuid = zu welchem user soll die Pm geschickt werden
vonid = Von welcher Person die PM kam
timestamp speichert die zeit, wann die Pm abgeschickt wurde
text speichert den text der Pm
titel speicher den Titel der Pm und
gelesen speichert, ob der User die PM gelesen hat oder nicht.

Vorüberlegungen:
Nun haben wir unsere Datenbank ja schon einmal. Nun brauchen wir noch ein Script, die uns mit der datenbank verbindet, ein script welches den User erlaubt, PMs zu schreiben, und zu lesen.

db.php auf diese gehe ich nicht näher ein
php:

<?$db_host = "localhost"; //Dein Server (normalerweise immer localhost)$db_user = "username"; //User-name der Datenbank$db_pass = "passwort"; //Passwort der datenbank$db_name = "loginscript"; //Datenbankname// Nun werden wir uns mit der Datenbank verbinden:mysql_connect("$db_host","$db_user","$db_pass") or die ("Keine Verbindung moeglich");mysql_select_db("$db_name") or die("Die Datenbank existiert nicht");?>




pmwrite.php
Die datei erlaubt den User, eine PM zu schreiben. Ich gehe davon aus, dass ihr die User-id des users habt, der grade eingeloggt ist! Die variable zuid wurde bei mir so dekladiert, dass mein einen Link anklicke muss, der bei mir hiess: Diesem User eine PM schicken, und einen Link hatte zu "pmwrite.php?zuid=$zuid"
php:

<?include("db.php"); // die datenbank wird hier "includet"$user_id = $_SESSION[&#039;id&#039;]; //dass müsste ihr warscheinlich ändern, jenachdem wie ihr die user_id rausfindet$zuid= $_GET[&#039;zuid&#039;]; ?>



Jetzt brauchen wir ein Formular, welches dem user erlaubt, eine PM zu schreiben. Meins hatte 2 Felder, einmal ein feld mit name="titel" und eins mit name="text" (ich hoffe mal, dass ihr die gleichen Feldnamen benutzt wie ich ;) ). Auf jedenfall muss das Formular so anfangen:

<form action="pmwrite.php?section=abschicken" method="post"> ...


Wie ihr euer Formular aufbaut, ist euch überlassen, hauptsache ist ihr beachtet die 2 feldnamen und das form-action.
php:

if(!isset($_GET[&#039;section&#039;]) == "") $section = "";else $section = "$_GET[&#039;section&#039;]";$titel= $_POST[&#039;titel&#039;];$text = $_POST[&#039;text&#039;];if($section == ""){?>... euer formular ...<?}if($section == "abschicken") //Das Formular wurde abgesendet{



Hier könnt ihr jetzt noch eine Abfrage machen, ob alle Felder ausgefüllt worden sind, ich alss das aber mal aus.
php:

<?php mysql_query("INSERT INTO pm (zuid, vonid, titel, text) VALUES (&#039;$zuid&#039;, &#039;$user_id&#039;, &#039;$titel&#039;, &#039;$text&#039;)");echo "Vielen Dank, ihr Pm wurde erfolgreich abgeschickt";}?>



So, die pmwrite.php ist nun fertig

pms lesen
auf meiner Seite hatte ich einen Link, der so aussah: "Sie haben [0] neue Private Nachrichten"
Wie macht man so einen Link? Das geht mit folgendem Code:
php:

<?include("db.php");$user_id = $_SESSION[&#039;id&#039;];$num = mysql_num_rows(mysql_query("SELECT * FROM pm WHERE gelesen = &#039;0&#039; and zuid = &#039;$userid&#039;"));if($num == "") $num = "0";echo "<a href="readpm.php">Sie haben [$num] neue Private Nachrichten</a>";?>




Wie ihr seht, verlinkt der Link auf die readpm.php, also kommt jetzt die

readpm.php
Als erstes gebe ich eine Liste aus, mitden ganzen pm's die der user hat, und zwar so:
php:

<?<?include("db.php");$user_id = $_SESSION[&#039;id&#039;];if(!isset($_GET[&#039;id&#039;])) $id == "";if($id == "") {$query = mysql_query("SELECT titel, id, text FROM pm WHERE gelesen = &#039;0&#039; and zuid = &#039;$userid&#039;");$num = mysql_num_rows($query);if($num == "") {$num = "0";echo "sie haben keine pms";}else {while($r=mysql_fetch_object($query)) {echo "<a href="readpm?id=$r->id">$r->titel</a>";}} ?>



So, jetzt habe wir die Liste, und jetzt kommen wir zu (verinfachten) Ausgabe der PM:
php:

<?php else {$r = mysql_fetch_row(mysql_query("SELECT titel, text FROM pm WHERE id=&#039;$id&#039; and zuid=&#039;$user_id&#039;"));mysql_query("UPDATE pm Set gelesen=&#039;1&#039; WHERE id=&#039;$id&#039; and zuid=&#039;$user_id&#039;");echo "Titel: $r[0]";echo "<br>Text: $r[1]";}?>




mysql_fetch_row gibt ein array zurück, wo $r[0] den Wert angibt, welches man nach Select als erstes Feld angegeben aht (hier titel), $r[1] gibt das zweite Feld aus, ...

Das wars auch schon, ist zwar ein sehr vereinfachtes Tutorial, aber man kann darauf aufbauen.



Vielen dank, ich werde es mal durchlesen und mal gucken ob ich was mit anfangen kann, vielen dank!

creationX
creationX am Freitag, 22. April 2005 um 22:34

Hallo,

habs nicht getestet nur mal auf der Festplatte gefunden, is glaub ich von irgend einer Seite.

Also solltest du sonnst noch hilfe bei der Anspassung ect benötigen frag einfach ;)

mfg

Spike_php
Spike_php am Samstag, 23. April 2005 um 09:22

nee ich kann ja proggen ich kann des selber,bloß mir fehlte die idee, wiel ich wusste net wie ich es angehen sollte!

creationX
creationX am Sonntag, 24. April 2005 um 12:33

Hallo,

ist okay ;)

Hoff du konntest mit dem source was anfangen ;)

mfg

Spike_php
Spike_php am Dienstag, 26. April 2005 um 14:48

naja mehr oder weniger, danke, konnte ich mir aber schon fats denken