Hallo, Gast! (Anmelden Registrieren)

[TUT] PN System - fortgeschritten
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5

Antwort schreiben 


Xtr3m Offline
Junior Member
**


Beiträge: 46
Registriert seit: May 2010
Bewertung 7
Beitrag #1
[TUT] PN System - fortgeschritten
Hallo Leute !

Mein 2. PHP TUT handelt sich um ein PN System. Hierbei geh ich davon aus, dass ihr bereits Datenbankverbindungen aufbauen könnt und Ahnung von HTML und bisschen PHP Grundlagen habt.


Schwierigkeit: Fortgeschritten / Amateur
Scriptsprachen: PHP/Mysql/HTML
Dauer: ca. 30-50 Minuten


Mein erster Gedanke ist wieder, was brauchen wir alles für Felder in der Datenbank. Mein [erstes TUT] handelte sich ja um ein Loginscript. Das heißt für mich, dass die User in der Datenbank schon vorhanden sind und ich auch mit $_SESSION["user_id"] aus dem Browser die Usersession bzw. userid auslesen kann.

So, wir legen in unserer Datenbank eine neue Tabelle an namens "pn". In dieser legen wir jetzt die Felder an. Wir brauchen:
  • id[INT] [PRIMARY KEY]
  • senderid [INT]
  • empfaengerid [INT]
  • betreff [TEXT]
  • message [TEXT]
  • datum [DATE]
  • gelesen [VARCHAR]

...damit wir das ganze möglichst einfach halten.

Die Felder:

id - ID der PN
senderid - userid des Senders
empfaengerid - Userid des Empfaengers
betreff - Betreff der PN
message - PN Nachricht
gelesen - Status gelesen j/n
datum - datum der Message (variabel kann man auch zeit hinzufügen)

daneben stehn gleich die Datentypen der Felder.

Als erster wollen wir mal unsere PN's sehn. Dies gescheiht mit einer Mysql Abfrage - auf grund der Variable "empfaengerid":

=[ TEIL 1 : AUSLESEN ]=
diese Datei heißt bei uns "mypn.php" und ich gehe davon aus, dass die mysql-daten schon in einer datei ausgelagert sind "db.php".
In dieser Datei lassen wir uns mal alle PN's auflisten und belegen den betreff gleich mit einem Link, wo man dann die ganze PN sieht:

PHP-Code:
include("db.php");
$userid $_SESSION["user_id"];

$mypnsql mysql_query("SELECT * FROM pn WHERE empfaengerid = '$userid' ORDER BY datum DESC ");

while(
$pn mysql_fetch_object($mypnsql)){
echo 
'<tr>';
echo 
'<td align="center">'.$pn->sender.'</td>';
echo 
'<td align="center"><a target="pnframe" href="readpn.php?id='.$pn->id.'&ac=show'">'.$pn->betreff.'</a></td>';
echo '<td align="
center">'.$pn->gelesen.'</td>;
echo '<td align="
center">'.$pn->datum.'</td>';
echo '</tr>';


so. Schon haben wir mal unsere PN's vor uns.
Zur Erklärung:
- include("db.php"); //inkludiert die Datei, wo die Dtaenbankdaten gespeichert sind
- $userid = $_SESSION["user_id"]; //schreibt in die Variable "$userid" die (hoffentlich) einmalige Userid der Session des browsers
- $mypnsql = mysql_query("SELECT * FROM pn WHERE empfaengerid = '$userid' ORDER BY datum DESC "); // Dies ist eine Mysql Abfrage, die besagt, dass er ALLE Felder, wo die empfängerid des, des users sein soll und geordnet bei Datum mit dem neuesten zuerst auslesen soll.
$pn = mysql_fetch_object($mypnsql) // Jetzt schreiben wir die ausgelesenen Felder in die Variable $pn, wo wir dann jedes Feld per $pn->feld bequem und vorallem objektorientiert auslesen können.

So, jetzt ist noch der teil wichtig, denn wir haben dem Betreff einen Link zugeordnet:

Code:
<a target="pnframe" href="pnac.php?id='.$pn->id.'">'.$pn->betreff.'</a>

Der Link verweist auf die Datei "pnac.php?id=PNID&ac=show". Wie wir im vorigen tut gelernt haben, können wir nun in der Datei "pnac.php" die ID der PN und die "ac" durch $_GET abrufen.
Da wir bis jetzt nur die PN's aufgelistet haben, aber wir wissen ja noch nicht was drinnensteht, lassen wir die PN jetzt einfach in der "pnac.php", wo wir weitere aktionen durchführen werden können, anzeigen:

PHP-Code:
include("db.php");
//Hiermit lesen wir mal aus, was die datei mit der PN tun soll und verweisen //auf die jeweilige funktion
$action $_GET['ac'];

if(
$action == "show"){
showpn();
}elseif(
$action == "send"){
sendpn();


Jetzt programmieren wir gleich darunter die function "showpn" aus, wo wir schließlich die PN dann anzeigen:

PHP-Code:
function showpn(){
$pnid $_GET['id'];
//PN mal auslesen und als Referenz die ID nehmen
$mypnsql mysql_query("SELECT * FROM pn WHERE id='$pnid'");

while(
$mypn=mysql_fetch_object($mypnsql){
//sendernick auslesen: 
$senderid $mypn->senderid;
$sendersql mysql_query("SELECT username FROM user WHERE id = '$senderid'");
$senderobject mysql_fetch_object($sendersql);
$sender $senderobject->username;

echo 
'<tr>';
echo 
'<td>VON: </td>';
echo 
'<td>'.$sender.'</td>';
echo 
'</tr>';
echo 
'<tr>';
echo 
'<td>Betreff: </td>';
echo 
'<td>'.$mypn->betreff.'</td>';
echo 
'</tr>';
echo 
'<tr>';
echo 
'<td>Message: </td>';
echo 
'<td>'.$mypn->message.'</td>';
echo 
'</tr>';
}
//nach dem Anzeigen setzen wir noch das Feld "gelesen" auf 'j' fuer ja:
mysql_query("UPDATE pn SET gelesen = 'j' WHERE id='$pnid'");


so. Jetzt sehen wir mal die PN's welche wir empfangen haben und auch die ganze PN mit Message Smile ... Jetzt fehlt noch ? -> genau, wir müssen ja auch eine senden können um eine lesen zu können tongue

Dazu machen wir wieder nix anderes als ne Form, wo wir die Daten eingeben, und das Script (pnac.php) wandelt uns zum einen die Userid in einen usernamen an und speichert diese in der datenbank. Die Form wo wir die daten eingeben, bei der action übergeben wir wieder dem link per "?ac=" was wir mit der Form tun wollen:

Code:
<form action="pnac.php?ac=send" method="POST">
<table>
<tr>
  <td>AN:</td>
  <td><input type="text" name="empfaenger"></td>
</tr>
<tr>
  <td>Betreff:</td>
  <td><input type="text" name="betreff"></td>
</tr>
</tr>
<tr>
  <td>Message:</td>
  <td><textarea name="message"></textarea></td>
</tr>
<tr>
  <td colspan="2"><input type="submit" value="PN senden !"></td>
</tr>
</table>
</form>

So, die Form steht mal. hier geben wir beim Senden einer PN unsere Daten ein. Jetzt verarbeiten wir diese in der "pnac.php" mit der function "sendpn();":

PHP-Code:
function sendpn(){

$empfaenger $_POST['empfaenger'];
$betreff$_POST['betreff'];
$message $_POST['message'];
//Wir setzen "gelesen" gleich auf 'n' für nein (geht auch per DEFAULT in der db) und noch den sender alesen, der wir selbst sind mittels session cookie
$gelesen 'n';
$userid $_SESSION["user_id"];

//User gibt usernamen ein, wir speichern aber userid, also suchen wir uns zum eingegebenen usernamen die id raus
$empfaengersql mysql_query("SELECT id FROM user WHERE username='$empfaenger'");
$empfobj mysql_fetch_object($empfaengersql);
$empfaenger $empfobj->id;

//Datum noch generieren: 
$datum getdate();
$datums "$datum[year]-$datum[mon]-$datum[mday]";

//und jetzt specihern wir alles in der Datenbank: 
mysql_query(INSERT INTO pn(empfaengerid,betreff,message,datum,gelesen)VALUES('$empfaenger';'$betreff','$message','$datums','$gelesen'));

//alles reingespeichert. Fehleingaben des users lassen wir mal weg, ihr wisst ja wie man die abfängt....


So, jetzt nachdem der user auch PN's senden und empfangen kann, haben wir ein fertiges, nach eigenen Wünschen ausbaubares PN System wink

Da ich das alles im "hardcoding" Stil jetzt "ausprogrammiert" habe, können Fehler vorliegen, bitte melden , wenn euch was auffällt (keine Tippfehler bitte)...

Achtung: dies soll eine HILFE zu einem PN System sein, ein Anfang. Natürlich erweiterbar um PN's löschen etc... wink

© 2010 by Xtr3m alias Xeption

Lg,

Xtr3m

+ PHP Loginscript TUT (Fortgeschritten / Amateur)
+ PHP PN System TUT (Fortgeschritten / Amateur)
+ PHP Mysql Database beginner (Anfänger/Fortgeschritten)
+ PHP-Mailer (Anfänger)
+ MyBB Login per vb.NET - Form (Fortgeschritten / Amateur (!))
[Mein devBlog]
Ich würde ja die Welt verändern, aber Gott gibt mir den Sourcecode nicht Huh
(Dieser Beitrag wurde zuletzt bearbeitet: 06.05.2010 18:55 von Xtr3m.)
03.05.2010 21:59
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


DruckenSendenNewsTwitterTwitterAnfang
Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Ein anderes Include-System icronosonic 2 342 09.03.2009 20:18
Letzter Beitrag: icronosonic
Gehe zu:

Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste