Geschrieben von waterloo am 03.06.2004, 19:46

Voraussetzungen:

In der Datenbank muss eine Tabelle mit dem Name news angelegt werden. Folgende Felder und Eigenschaften sind zu berücksichtigen:

Feld: ID Typ: Integer Länge: 10 Extra: auto_increment Primärschlüssel: aktiviert
Feld: name Typ: VarChar Länge: 20
Feld: betreff Typ: VarChar Länge: 255
Feld: datum Typ: VarChar Länge: 10
Feld: zeit Typ: VarChar Länge: 10
Feld: message Typ: Text
Feld: detail Typ: VarChar Länge: 10

Beschreibung:

ID wird automatisch fortgeführt und nur zur Identifikation der News verwendet. In das Feld "name" kommt der Name des Autors, in "betreff" der Betreff der News, in "datum" das aktuelle Datum, in "zeit" die aktuelle Zeit und in "message" die eigentliche News rein. Das Feld "detail" dient dazu, falls die News zu lang sein sollte, dann kappt er die Nachricht und man kann mittels Link die gesamte Nachricht anschauen. Dazu später mehr Informationen.

Nun geht es an die Dateien:

---------------------------- mysql.inc ----------------------------

Am besten, man verlagert die MySQL-Verbindung in ein extra-Script, um es aus jeder Funktion aufrufen zu können.

So sieht das Verbindungsscript aus:

<?

# Vordefinierte Variablen

$dbhost = "localhost";
$dbuser = "username";
$dbpass = "password";
$dbname = "databasename";

# Verbindung mit der MySQL-DB aufnehmen

if (!($verbindung = mysql_pconnect ($dbhost, $dbuser, $dbpass))) {
echo("Der Verbindungsversuch zur Datenbank ist fehlgeschlagen!<p>");
exit();
}

# Database auswählen

if (!mysql_select_db ($dbname, $verbindung)) {
echo("Die Datenbank konnte nicht ausgewählt werden!<p>");
exit();
}
?>
[/code]

Das Ergebnis der Verbindung steht jetzt in der Variable $verbindung. Diese wird später weiter verarbeitet.

---------------------------- news.php ----------------------------

Scripten wir ersteinmal das Abfrage-Script:


<?

Wir nehmen Verbindung mit der Datenbank auf
Hier kommt die obere Datei ins Spiel


include("mysql.inc");

Es wird überprüft, wieviel Einträge vorhanden sind


$counter = mysql_query("SELECT Count(*) as total FROM news");
$eintraege = mysql_fetch_array($counter);

Die Gesamtanzahl der Einträge steht nun in $einträge[total], mit der wir jetzt den letzten Beitrag auslesen und daraus die Zeit filtern


$Query = "SELECT zeit FROM news WHERE ID = $eintraege[total]";
if (!($ergebnis = mysql_query ($Query, $verbindung))) {
echo("Die Abfrage ist fehlgeschlagen!<p>");
echo("Ihre Abfrage $Qeue war nicht erfolgreich!<p>");
exit();
}

# Zeit auslesen

while ($zeile = mysql_fetch_object ($ergebnis)) {
$time = $zeile->zeit;
}

Nun haben wir die Zeit des letzten Beitrages in $time gespeichert. Jetzt wollen wir wissen, ob der Benutzer ein Cookie gespeichert hat, das den selben Wert hat, wie die Variable $time. Dazu folgender Code:


if (isset($newsnew)) {

if ($newsnew == $time) {

$vorhanden = "ja";
}
else {

setcookie("newsnew",$time,time()+3600*24*365);
$vorhanden = "nein";
}
}

Existiert der Cookie (Keks) nicht, dann


else {

setcookie("newsnew",$time,time()+3600*24*365);
$vorhanden = "nein";

}

legt er ihn neu an.
Wichtig bei der ganze Cookie-Geschichte ist, dass sie noch vor dem HEADER des Dokuments ablaufen muss, sonst bekommt er Probleme.

Nun startet das Dokument, was später auch zu sehen sein wird.


<html>
<head>
<title>News</title>

An dieser Stelle können auch noch SyleSheets mit eingebunden werden, sind aber nicht notwendig.


</head>
<body bgcolor=#E7E7E7>
<?

echo "<center><font face=\"Arial\" size=3>News</font>";

Jetzt folgenden die Überprüfungen, die das Script bei jedem Aufruf durchcheckt.

########## HAUPTPROGRAMM ##########

if ($action == "show_detail") { show_detail($id,$verbindung); }

else { show_news($verbindung, $eintraege,$start); }

Die einzelnen Aufrufe, werde ich später etwas näher beschreiben. Es folgenden die Funktionen.

########## FUNKTIONEN ##########

function show_news($verbindung, $eintraege,$start) {

global $PHP_SELF;

Hier wird nun festgelegt, wieviel Beiträge pro Seite angezeigt werden sollen.


$beitraege = 10;

Es wird angezeigt, wieviel Einträge vorhanden sind


echo ("Es sind ". $eintraege[total] ." Einträge vorhanden.<p>");

Es wird geprüft, ob schon eine weitere Seite aufgerufen wurde, indem man einfach überprüft, ob die Variable $start mit übergeben wurde.


if (!isset($start)) { $start = 0; }

Nun werden die Daten aus der Datenbank gelesen ...


$Query = "SELECT * FROM news ORDER BY ID DESC limit ". $start .",". $beitraege;
if (!($ergebnis = mysql_query ($Query, $verbindung))) {
echo("Die Abfrage ist fehlgeschlagen!<p>");
echo("Ihre Abfrage $Qeue war nicht erfolgreich!<p>");
exit();
}

... und hier angezeigt


echo ("<table border=0 cellpadding=0 cellspacing=0 width=70%>");

while ($zeile = mysql_fetch_object ($ergebnis)) {
echo("<tr width=100%>");
echo("<td colspan=\"5\" background=\"img/newsmenu.jpg\">&nbsp;</td>");
echo("</tr>");
echo("<tr>");
echo("<td align=\"left\" bgcolor=\"#FFFFFF\"><b>$zeile->ID.</b></td>");
echo("<td align=\"left\" bgcolor=\"#FFFFFF\" width=100%>&nbsp;&nbsp;Betreff:<b> $zeile->betreff</b></td>");

Nun kommt das Cookie wieder ins Spiel. Er überprüft, was in der Variable $vorhanden steht und wertet dieses aus. Es wird das Pic newsnew.gif angezeigt. Nach Bedarf reicht hier auch einfach ein Text "Neu".


if ($vorhanden == "nein") {
echo("<td align=\"center\" bgcolor\"#FFFFFF\"><img src=\"newsnew.gif\"></td>");
}
else { echo("<td>&nbsp;</td>"); }
echo("<td align=\"right\" bgcolor=\"#FFFFFF\">&nbsp;$zeile->datum&nbsp;|&nbsp;$zeile->zeit</td>");
echo("</tr>");
echo("<tr>");

Wurde beim Erstellen der News veranlasst, dass Details angezeigt werden, werden hier nur 200 Zeichen von den News angezeigt und danach ein Link. Möchte mann etwas mehr Zeichen anzeigen lassen, dann einfach die 200 verändern.


if ($zeile->detail == "on") {
$message = substr($zeile->message, 0, 200);
echo("<td colspan=\"5\" align=\"left\" bgcolor=\"#FFFFFF\"><br>$message... (<a href=\"$PHP_SELF?action=show_detail&id=$zeile->ID\">mehr</a>)<br>&nbsp;</td>");
}
else {
echo("<td colspan=\"5\" align=\"left\" bgcolor=\"#FFFFFF\"><br>$zeile->message<br>&nbsp;</td>"); }
echo("</tr>");
echo("<tr>");
echo("<td colspan=\"5\" background=\"img/newsmenu.jpg\">&nbsp;</td>");
echo("</tr>");
echo("<tr><td><p>&nbsp;</td></tr>");
}

echo("</table><p>");

Als letzte Prozedur dieser Funktion kommen die zwei Buttons Vor/Zurück. Das mit dem Weis (#ffffff) hab ich gemacht, damit es unten das Format der Buttons nicht veränder oder verschiebt. Mann kann natürlich auch nur n Leerzeichen oder gar nix anzeigen lassen.


if ($start == 0) {
echo("<font color=\"#FFFFFF\">Zurück</font>");
}

else {
$zurueck = $start - $beitraege;
echo("<a href=\"$PHP_SELF?start=". $zurueck ."\">Zurück</a>");
}

$gesamt = $start + $beitraege;

if ($gesamt >= $eintraege[total]) {
echo("&nbsp;&nbsp;&nbsp;");
}
else {
$weiter = $start + $beitraege;
echo("&nbsp;&nbsp;&nbsp;<a href=\"$PHP_SELF?start=$weiter\">Weiter</a>"); }

}

Die nächste Funktion ist für die Detail-Ansicht zuständig.


function show_detail($id,$verbindung) {

global $PHP_SELF;

Es werden einfach nur die Daten aus der Datenbank ausgelesen und angezeigt.


$Query = "SELECT * FROM news WHERE ID = $id";
if (!($ergebnis = mysql_query ($Query, $verbindung))) {
echo("Die Abfrage ist fehlgeschlagen!<p>");
echo("Ihre Abfrage $Query war nicht erfolgreich!<p>");
exit();
}

echo ("<table border=0 cellpadding=0 cellspacing=0 width=70%>");

while ($zeile = mysql_fetch_object ($ergebnis)) {
echo("<tr>");
echo("<td align=\"left\" bgcolor=\"#FFFFFF\"><b>$zeile->ID.</b></td>");
echo("<td align=\"left\" bgcolor=\"#FFFFFF\" width=100%>&nbsp;&nbsp;Betreff:<b> $zeile->betreff</b></td>");
echo("<td align=\"right\" bgcolor=\"#FFFFFF\">&nbsp;$zeile->datum&nbsp;|&nbsp;$zeile->zeit</td>");
echo("</tr>");
echo("<tr>");
echo("<td colspan=\"3\" align=\"left\" bgcolor=\"#FFFFFF\"><br>$zeile->message<br>&nbsp;</td>");
echo("</tr>");
}

Damit man auch wieder dahin zurückkommt, wo man war, benutze ich hier das Zurück des Browsers.


echo ("</table><p><a href=\"javascript:window.history.back()\"><- zurück</a><p>&nbsp;");

}

Nun wird noch die Verbindung zur Datenbank geschlossen und Feierabend ;-)


mysql_close ($verbindung);

echo("<p>&nbsp;");

?>
</body>
</html>

---------------------------- admin.php ----------------------------

Dieses Script ist für den Admin gedacht. Er erstellt hier seine News.

Erstmal wieder den HEADER, damit man ihn nicht wieder überall mit hinschleppen muss ;-)


<html>
<head>
<title>Admin</title>

Natürlich kann man auch an dieser Stelle wieder StyleSheets mit einbinden


</head>
<body bgcolor=#E7E7E7>
<?

Als aller erstes wird wieder eine Variabel vordefiniert. Hierbei handel es sich um das PW des Admins. Ich benutzte hierbei die MD5-Verschüsselung. Einen String in einen md5-Code umwandeln könnt ihr auf folgender Seite: http://www.rpgcommunity.de/clanwissen/p_g_md5.php

Nun hier der Code:


# PW lautet: test
$adminpw = "098f6bcd4621d373cade4e832627b4f6";

echo "<center>";

Auch hier gibt es wieder ein Hauptprogramm


########## HAUPTPROGRAMM ##########

if ($intern) { intern($pass,$adminpw); }
else if ($setnews) { setnews($subject,$autor, $nachricht, $detail, $adminpw,$pass); }
else { login(); }

Und hier wieder die Funktionen


########## FUNKTIONEN ##########

Als erste Funktion haben wir der Login in Form eines Formulars


function login() {

global $PHP_SELF;

echo <<<LOGIN

Es ist nur dem Admin dieser Page erlaubt, in diesen Bereich einzutreten !<p>&nbsp;<p>
<FORM action="$PHP_SELF?check=true.php" method="post">
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td align="right">Passwort:&nbsp;</td>
<td><input type="password" name="pass"></td>
</tr>
<tr>
<td><p>&nbsp;</td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="senden" value="Weiter ->"></td>
</tr>
</table>

LOGIN;

}

Die folgende Funktion dient zur Überprüfung des Passwortes und kann aus jeder Funktion aus aufgerufen werden


function check($pass,$adminpw) {

$codiert = md5($adminpw);

if ($codiert != $pass) {
echo "Falsches Passwort !";
exit();
}
}

Nun folgt das Formular für die News


function intern($pass,$adminpw) {

global $PHP_SELF;

echo <<<NEWS

<FORM action="$PHP_SELF?setnews=true" method="post">
<table border=0 cellpadding=3 cellspacing=0>
<tr>
<td align="right"><b>Betreff:</b>&nbsp;</td>
<td><input type="text" name="subject" maxlength=50 size=30></td>
</tr>
<tr>
<td align="right"><b>Autor:</b>&nbsp;</td>
<td><input type="text" name="autor" maxlength=50 size=30></td>
</tr>
<tr>
<td align="right"><b>Nachricht:</b>&nbsp;</td>
<td><textarea name="nachricht" cols="40" rows="4"></textarea></td>
</tr>
<tr>
<td></td>
<td><input type="Checkbox" name="detail"> Im Detail anzeigen lassen</td>
</tr>
</table><p>

Hier werden die zwei Passwörter versteck übermittel


<input type="hidden" name="pass" value="$pass">
<input type="hidden" name="adminpw" value="$adminpw">
<input type="Submit" name="send" value="Eintragen">
NEWS;
}

In folgender Funktion werden die News gespeichert


function setnews($subject, $autor, $nachricht, $detail,$adminpw,$pass) {

global $PHP_SELF;

Ersteinmal wird überprüft, ob auch der Admin am Rechner sitzt ;-)


check($adminpw,$pass);

Anschließend kommt wieder die obige Datei zum Einsatz


include("mysql.inc");

Danach wird die Zeit und das Datum eingelesen


$time = date("h:i:s");
$date = date("j.n.Y");

Hier wird überprüft, ob die Option "Detailansicht" aktiviert wurde


if ($detail == "") { $detail = "off"; }

Noch schnell die Umbrüche ersetzt


$nachricht = ereg_replace(chr(10),"<br>",$nachricht);

Und danach wird in die Datenbank geschrieben


$query = "INSERT INTO news (name, betreff, datum, zeit, message, detail) VALUES ('$autor','$subject','$date','$time','$nachricht','$detail')";
if (!mysql_query($query,$verbindung)) {
echo("Die Daten konnten nicht gespeichert werden!<p>");
exit();
}

else { echo("Der Eintrag wurde erfolgreich eingetragen.<p><a href=\"$PHP_SELF?news=true\">weiterer Eintrag</a><br><a href=\"$PHP_SELF?intern=true\">Zurück zum Admin-Bereich</a>"); }

Und zuletzt die Verbindung wieder getrennt


mysql_close ($verbindung);

}
?>
</body>
</html>

Sollt es irgendwelche Probleme geben, stehe ich Euch gerne zur Verfügung. Meine Mail: waterloothebest@yahoo.de

HAVE FUN ;-)

Bewertung Anzahl
6
33,3 %
1 Bewertungen
3
66,7 %
2 Bewertungen