Einfaches Newssystem
Allgemeines
Ein Newssystem verwenden relativ viele Seiten um Updates ihrer Seite zu publizieren. Ein Newssystem kann auch für Blogeinträge verwendet werden etc. Es wird sozusagen immer dort verwendet, um den Besuchern vom aktuellen Stand etwas zu berichten. In diesem Tutorial wird lediglich das Grundgerüst erklärt. Erweiterungen sind zwar geplant, aber ich weiß noch nicht, wann ich diese Reihe fortsetzen werde.
Voraussetzungen
-> Einfaches Log In-System
Vorbereitungen: Schritt 1
Wir erstellen eine neue Datenbank, welche ‘news’ heißen wird.
1 2 3 4 5 6 7 8 9 | CREATE TABLE `news` ( `id` INT( 5 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , `user` INT( 5 ) NOT NULL , `timestamp` INT( 10 ) NOT NULL , `titel` VARCHAR ( 75 ) NOT NULL , `preview` MEDIUMTEXT NOT NULL , `news` MEDIUMTEXT NOT NULL , `addon` MEDIUMTEXT NOT NULL ) |
Insgesamt erstellen wir sieben Felder. Die Felder ‘id’ und ‘user’ sind denke ich selbstverständlich. Das Feld ‘user’ ist ein numerisches Feld, da wir mit den User IDs arbeiten und nicht mit den Usernamen. Würden wir mit den Namen arbeiten, wäre es evtl. später mühseelig Abfragen zu erstellen, ob etwas übereinstimmt oder nicht. In dem Feld ‘timestamp’ werden wir später nur mit der PHP-Funktion ‘time();’ arbeiten. Da ein Timestamp maximal 10 Zeichen lang ist und immer numerisch ist, verwenden wir den Typen INT mit der maximalen Zeichenlänge von 10. Im Feld ‘titel’ kommt später der Titel der News rein. Es ist ein VARCHAR-Feld und kann maximal 75 Zeichen lang sein. Ich gehe von der maximalen Zeichenlänge von 75 aus, da es eigentlich selten Titeln gibt, die überhaupt länger als 75 Zeichen lang sind. Man kann die Länge auch kleiner bzw. größer machen, aber ich denke, dass die Zahl 75 am optimalsten ist. Das Interessante an diesem Newssystem sind die drei weiteren Felder: ‘preview’, ‘news’ und ‘addon’.
preview
Dieses Feld heißt übersetzt so viel wie ‘Vorschau’. Dieses Feld ist für den späteren Gebrauch optional. Je nachdem, wie ihr später eure Seiten gestaltet, könnt ihr mit diesem Feld später euren Besucher einen Vorgeschmack auf eure ganzen Neuigkeiten machen.
news
In diesem Feld werden eure gesamten News eingetragen. Dieses Feld ist nicht optional.
addon
Dieses Feld kann als Updatebox verwendet werden und ist, wie das Feld ‘preview’, optional. Hier können bei Grafikseiten beispielsweise die Updates eingetragen werden.
preview vs. addon – Wo sind die Unterschiede?
Es gibt bei beiden Feldern eigentlich keine Unterschiede. Dennoch bevorzugen einige es, dass sie eine Vorschau auf dessen News machen möchten und trotzdem schon ihre Updates präsentieren möchten. Eigentlich braucht man nur ein Feld von beiden zu verwenden. Aber falls man beispielsweise eine Updatebox anzeigen möchte sowie eine Vorschau auf die News, kann man beide Felder bequem verwenden, ohne großartig später in der Datenbank zu arbeiten.
Tutorial: Schritt 1; Inkludierung wichtiger Dateien
Wir erstellen für die Member Area, welches auch Admin Control Panel, kurz ACP, in diesem Fall genannt werden kann, eine Datei. Diese nennt sich ‘news.php’. Zuerst aber müssen wir unsere ganzen wichtigen Dateien inkludieren.
1 2 3 4 5 6 | <?php include_once ('inc.php'); include_once ('inc.function.php'); include_once ('inc.check.php'); ?> <!-- Hier kommt der spätere Teil hin --> |
In ‘inc.php’ befinden sich die Datenbankverbindungen, die wir auch später verbrauchen. Mit ‘inc.function.php’ inkludieren wir unsere Funktionen, die wir später brauchen. Mittels ‘inc.check.php’ überprüfen wir noch, ob der Benutzer Zugriff auf diesen Bereich hat.
Tutorial: Schritt 2; Member Area Erweiterung
Da wir nun unsere Dateien eingebaut haben, kommen wir zum benötigten Formular für die News.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <h1>News hinzufügen</h1> <form method="post" action="?"> <input type="hidden" name="Cde" value="<?php echo rand(1, 10).rand(1, 10); ?>"> <table with="90%" cellpadding="2" cellspacing="2"> <tr> <td width="40%" valign="middle">» Titel</td> <td width="60%" align="center"><input name="Ttl" value="<?php echo $Pst_Ttl; ?>" type="Text"></td> </tr> <tr> <td width="40%" valign="top">» Vorschau<br> <i>Dieses Feld ist optional.</i></td> <td width="60%" align="center"><textarea rows="5" style="width: 100%;" name="Prv"><?php echo $Pst_Prv; ?></textarea></td> </tr> <tr> <td width="40%" valign="top">» News</td> <td width="60%" align="center"><textarea rows="10" style="width: 100%;" name="Nws"><?php echo $Pst_Nws; ?></textarea></td> </tr> <tr> <td width="40%" valign="top">» Updatebox<br> <i>Dieses Feld ist optional.</i></td> <td width="60%" align="center"><textarea rows="3" style="width: 100%;" name="Upd"><?php echo $Pst_Upd; ?></textarea></td> </tr> <tr> <td colspan="2" align="center"><input type="Submit" name="Snd" value="Eintragen"></td> </tr> </table> </form> |
Das versteckte Feld trägt den Namen ‘Cde’ und bedeutet ausgeschrieben Code. Es wird eingebaut um später einen doppelten Eintrag zu erstellen, falls dieser erfolgreich eingetragen wird. Wir benutzen als Wert dieses INPUT-Feld einen zufallsgenerierten Zahlencode, welcher mittels der RAND-Funktion erstellt wird. Die RAND-Funktion ermittelt in diesem Fall zwei Zahlen zwischen 1 und 10. Damit wird eigentlich garantiert, dass der Code niemals beim Absenden doppelt vorkommen wird.
Wie ihr auch erkennen könnt, sind PHP-Teile im Formular erkennbar. Sie wurden eingebaut, damit man beim fehlerhaften Abschicken der Felder nicht alles erneut ausfüllen musst. Bei längeren Texten ist das wahrscheinlich sehr hilfreich. Die Variabeln werden erst im dritten Schritt erzeugt. Beim ersten Aufrufen der Seite werden die Variabel leer sein, da keine Werte abgeschickt wurden.
Tutorial: Schritt 3; PHP Eingliederung
Mit dem Formular können wir nun eigentlich Neuigkeiten bereits eintragen. Doch sie werden nicht gespeichert, da sie nicht in die Datenbank ‘news’ eingefügt werden. Das ändern wir nun mit dem dritten Schritt, mithilfe der PHP Eingliederung. Dieser Teil wird vor dem Formular eingefügt und erzeugt, beim fehlerhaften Senden, die benötigten Variabeln, die im Formular im Anschluss erscheinen werden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | <?php if (isSet($_POST['Snd'])) { ?> <h1>Meldung</h1> <?php $Pst_Cde = Sve ($_POST['Cde']); $Pst_Ttl = Sve ($_POST['Ttl']); $Pst_Prv = Sve ($_POST['Prv']); $Pst_Nws = Sve ($_POST['Nws']); $Pst_Upd = Sve ($_POST['Upd']); if (empty($Pst_Cde) || $_SESSION['Cde'] == $Pst_Cde) { ?> Bitte fülle das Formular nochmal aus. <?php } else if (empty($Pst_Ttl)) { ?> Das Feld 'Titel' wurde freigelassen. <?php } else if (empty($Pst_Nws)) { ?> Das Feld 'News' wurde freigelassen. <?php } else { $_SESSION['Cde'] = $Pst_Cde; Ubf ("INSERT INTO `news` VALUES (NULL, ".$_SESSION['Usr_Id'].", ".time().", '".$Pst_Ttl."', '".$Pst_Prv."', '".$Pst_Nws."', '".$Pst_Upd."')"); unset ($Pst_Ttl); unset ($Pst_Prv); unset ($Pst_Nws); unset ($Pst_Upd); ?> Deine News wurde eingetragen und ist für jeden nun sichtbar. <?php } } ?> |
Wir überprüfen mittelst isSet ($_POST['Snd']) ob unser Formular überhaupt abgeschickt wurde. Falls dies passiert, werden unsere Variabeln erstmal sicherer gemacht mit der eigenen Funktion Sve ();. Ab dann folgen Abfragen, die schrittweise überprüfen, ob alles auch richtig ausgefüllt wurde. Ist kein Code vorhanden oder hat unsere Session ‘Cde’ genau den gleichen Wert wie aus der Post-Variabel Cde, so erscheint der Fehler, dass das Formular nochmal abgeschickt wird.
Ziel ist es zu überprüfen, ob nicht jemand von einer anderen Seite aus versucht News zu publizieren auf eurer Seite. Mit der ODER-Abfrage überprüfen wir, ob nicht jemand aus Versehen die Seite aktualisiert hat.
Die danach folgenden Abfragen erklären sich von selbst und brauchen keine all zu große Erklärung. Die PHP-Funktion empty(); überprüft, ob die Variabel leer ist.
Falls alle Abfragen negativ abgelaufen sind, erfolgt erst der Eintrag. Dies wird mit der eigenen PHP-Funktion Ubf (); abgeschickt. Mit der Unset ()-Funktion werden die Variabeln im Anschluss wieder geleert, sodass auch das Formular im Anschluss wieder leer ist.
Tutorial: Schritt 4; Zusammenfassung
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | <?php include_once ('inc.php'); include_once ('inc.function.php'); include_once ('inc.check.php'); if (isSet($_POST['Snd'])) { ?> <h1>Meldung</h1> <?php $Pst_Cde = Sve ($_POST['Cde']); $Pst_Ttl = Sve ($_POST['Ttl']); $Pst_Prv = Sve ($_POST['Prv']); $Pst_Nws = Sve ($_POST['Nws']); $Pst_Upd = Sve ($_POST['Upd']); if (empty($Pst_Cde) || $_SESSION['Cde'] == $Pst_Cde) { ?> Bitte fülle das Formular nochmal aus. <?php } else if (empty($Pst_Ttl)) { ?> Das Feld 'Titel' wurde freigelassen. <?php } else if (empty($Pst_Nws)) { ?> Das Feld 'News' wurde freigelassen. <?php } else { $_SESSION['Cde'] = $Pst_Cde; Ubf ("INSERT INTO `news` VALUES (NULL, ".$_SESSION['Usr_Id'].", ".time().", '".$Pst_Ttl."', '".$Pst_Prv."', '".$Pst_Nws."', '".$Pst_Upd."')"); unset ($Pst_Ttl); unset ($Pst_Prv); unset ($Pst_Nws); unset ($Pst_Upd); ?> Deine News wurde eingetragen und ist für jeden nun sichtbar. <?php } } ?> <h1>News hinzufügen</h1> <form method="post" action="?"> <input type="hidden" name="Cde" value="<?php echo rand(1, 10).rand(1, 10); ?>"> <table with="90%" cellpadding="2" cellspacing="2"> <tr> <td width="40%" valign="middle">» Titel</td> <td width="60%" align="center"><input name="Ttl" value="<?php echo $Pst_Ttl; ?>" type="Text"></td> </tr> <tr> <td width="40%" valign="top">» Vorschau<br> <i>Dieses Feld ist optional.</i></td> <td width="60%" align="center"><textarea rows="5" style="width: 100%;" name="Prv"><?php echo $Pst_Prv; ?></textarea></td> </tr> <tr> <td width="40%" valign="top">» News</td> <td width="60%" align="center"><textarea rows="10" style="width: 100%;" name="Nws"><?php echo $Pst_Nws; ?></textarea></td> </tr> <tr> <td width="40%" valign="top">» Updatebox<br> <i>Dieses Feld ist optional.</i></td> <td width="60%" align="center"><textarea rows="3" style="width: 100%;" name="Upd"><?php echo $Pst_Upd; ?></textarea></td> </tr> <tr> <td colspan="2" align="center"><input type="Submit" name="Snd" value="Eintragen"></td> </tr> </table> </form> |
Ende
So, in diesem Tutorial wurde das Newssystem versucht zu erklären. Es ist auch nur das Grundgerüst – Kommentare der Besucher sowie die Eingliederung in die Hauptseite werden eines Tages kommen. Auch sind Zusatzfunktion wie Tags der News in Planung – aber bevor all dies geschieht, wird noch etwas Zeit vergehen.


