Author: Progman, zuletzt bearbeitet von bazzi @ 2004/03/08 19:08:06
Bitte beachten Sie, dass die Tutorialkapitel zusammenhängen. Wenn sie direkt auf ein Kapitel verlinkt wurden müssen Sie gegebenenfalls die vorherigen Kapitel auch lesen. Achten Sie beim lesen darauf, dass Sie kein Kapitel überspringen.
Unser erstes Newsscript
1. Was muss gespeichert werden
Wir wollen nun unser erstes Newsscript schreiben. Dazu müssen wir erstmal wissen, was wir alles speichern wollen. Wir können aber eigentlich die Tabelle News von vorher benutzen.
CREATE TABLE News ( ID INT AUTO_INCREMENT PRIMARY KEY, Titel VARCHAR(100), Inhalt TEXT, Datum DATETIME );
Die Spalte für den Autor habe ich erstmal weggelassen. Dies ist auch erstmal nur ein einfaches Newsscript.
2. Grundgerüst
Als Grundgerüst für unsere Seite nehmen wir den Quellcode aus dem Kapitel 3 Spalten Layout. Von diesem Kapitel nehmen wir die Array-Version. Die index.php sieht dann so aus.
<?php
error_reporting(E_ALL);
include "inc/config.php"; // die Konfigurationsdateien lesen.
echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n";
echo " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n";
echo "<html>\n";
echo " <head>\n";
echo " <title>Meine Seite</title>\n";
echo " <link rel=\"stylesheet\" type=\"text/css\" href=\"page.css\" />\n";
echo " <meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\" />\n";
echo " </head>\n";
echo " <body>\n";
echo " <div id=\"root\">\n"; // ganz oberer Div-Holder
echo " <div id=\"banner\">\n"; // banner
include "banner.php";
echo " </div>\n";
echo " <div id=\"links\">\n"; // linkes Menu
include "menu.php";
echo " </div>\n";
echo " <div id=\"mitte\">\n"; // In der Mitte der Inhalt
include "inhalt.php";
echo " </div>\n";
echo " <br style=\"clear:both;\" />\n"; // css-float beenden
echo " </div>\n";
echo " </body>\n";
echo "</html>\n";
?>
In der config.php, variablen.php und constant.php stehen dann folgende Sachen.
<?php
include 'constant.php';
include 'variablen.php';
//include 'functions.php';
// wir haben keine eigenen Funkionen
?>
<?php
// constant.php
define('MYSQL_HOST', 'localhost');
define('MYSQL_USER', 'foobar'); // kann ich ja schlecht für
// eure MySQL wissen
define('MYSQL_PASS', 'blabli'); // s.o.
define('MYSQL_DATABASE', 'xxx'); // s.o.
?>
<?php
// variablen.php
$dateien = array();
$dateien['news'] = "news.php";
?>
Die anderen Quellcodes stehen im Kapitel 3 Spalten Layout. Wir müssen jetzt aber noch die index.php bearbeiten. Denn diese, oder includete Dateien, müssen ggf. auf die MySQL-Datenbank zugreifen, wie z.B. unser Newsscript. In der index.php schreiben wir dann unsere MySQL-Verbindungsbefehle hin.
<?php
error_reporting(E_ALL);
include "inc/config.php"; // die Konfigurationsdateien lesen.
// Verbindung zu MySQL Aufbauen
@mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die(mysql_error());
mysql_select_db(MYSQL_DATABASE) OR die(mysql_error());
echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n";
echo " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n";
echo "<html>\n";
echo " <head>\n";
echo " <title>Meine Seite</title>\n";
echo " <link rel=\"stylesheet\" type=\"text/css\" href=\"page.css\" />\n";
echo " <meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\" />\n";
echo " </head>\n";
echo " <body>\n";
echo " <div id=\"root\">\n"; // ganz oberer Div-Holder
echo " <div id=\"banner\">\n"; // banner
include "banner.php";
echo " </div>\n";
echo " <div id=\"links\">\n"; // linkes Menu
include "menu.php";
echo " </div>\n";
echo " <div id=\"mitte\">\n"; // In der Mitte der Inhalt
include "inhalt.php";
echo " </div>\n";
echo " <br style=\"clear:both;\" />\n"; // css-float beenden
echo " </div>\n";
echo " </body>\n";
echo "</html>\n";
?>
Jetzt haben wir unser Grundgerüst. Jetzt schreiben wir die news.php
3. Das eigentliche Newsscript
Wir machen uns erstmal Gedanken wie die News dargestellt werden sollen. Wir können z.B. sagen das oben, in der Tabellenzelle, wo die news.php includet wird, erstmal der Text News steht. Dies sieht erstmal so aus.
<?php
// news.php
echo "<h2>News</h2>\n";
?>
Die Formatierung des Textes wird dann mit einer CSS-Datei gemacht. Jetzt kommt schon der MySQL-Query den wir an die Datenbank senden wollen. Nun was wollen wir auslesen? Wir haben 4 Spalten ID, Titel, Text und Datum. Von diesen 4 Spalten brauchen wir aber nur 3. Die ID ist nicht wichtig in der Ausgabe. Dies braucht man nur für eine Referenz zum löschen oder bearbeiten. Also lesen wir nur diese 3 Spalten aus.
SELECT Titel, Inhalt, Datum FROM News;
Und da die News nach dem Datum abwärts sortiert werden sollen brauchen wir noch ein ORDER BY im Query.
SELECT Titel, Inhalt, Datum FROM News ORDER BY Datum DESC;
Diesen Query speichern wir in einer Variable $sql.
<?php
// news.php
echo "<h2>News</h2>\n";
$sql = "SELECT
Titel,
Inhalt,
Datum
FROM
News
ORDER BY
Datum DESC";
?>
In PHP braucht man das Semikolon vom MySQL-Query nicht mitsenden. Diesen senden wir nun mit mysql_query().
<?php
// news.php
echo "<h2>News</h2>\n";
$sql = "SELECT
Titel,
Inhalt,
Datum
FROM
News
ORDER BY
Datum DESC";
$result = mysql_query($sql) OR die(mysql_error());
?>
Nun fragen wir ab ob im Query ein Datensatz vorhanden ist. Denn es kann sein, dass gar keine Daten in der Resulttabelle vorhanden sind.
<?php
// news.php
echo "<h2>News</h2>\n";
$sql = "SELECT
Titel,
Inhalt,
Datum
FROM
News
ORDER BY
Datum DESC";
$result = mysql_query($sql) OR die(mysql_error());
if(mysql_num_rows($result)) {
} else {
}
?>
Im Else-Teil schreiben wir eine Nachricht hin, wo dann steht das keine Newseinträge in der Datenbank vorhanden sind.
<?php
// news.php
echo "<h2>News</h2>\n";
$sql = "SELECT
Titel,
Inhalt,
Datum
FROM
News
ORDER BY
Datum DESC";
$result = mysql_query($sql) OR die(mysql_error());
if(mysql_num_rows($result)) {
} else {
echo"<p>Keine News vorhanden</p>\n";
}
?>
Im If-Teil kommt unsere while-Schleife rein, die dann die Daten aus dem Query ausließt.
<?php
// news.php
echo "<h2>News</h2>\n";
$sql = "SELECT
Titel,
Inhalt,
Datum
FROM
News
ORDER BY
Datum DESC";
$result = mysql_query($sql) OR die(mysql_error());
if(mysql_num_rows($result)) {
while($row = mysql_fetch_assoc($result)) {
}
} else {
echo"<p>Keine News vorhanden</p>\n";
}
?>
In dem Array $row stehen nun nacheinander die Daten aus dem Query. Diesen können wir nun mit Divs schön formatieren.
<?php
// news.php
echo "<h2>News</h2>\n";
$sql = "SELECT
Titel,
Inhalt,
Datum
FROM
News
ORDER BY
Datum DESC";
$result = mysql_query($sql) OR die(mysql_error());
if(mysql_num_rows($result)) {
while($row = mysql_fetch_assoc($result)) {
echo "<div class=\"newseintrag\">\n";
echo " <div class=\"Datum\">\n";
echo $row['Datum'];
echo " </div>\n";
echo " <div class=\"Titel\">\n";
echo $row['Titel'];
echo " </div>\n";
echo " <div class=\"Inhalt\">\n";
echo nl2br($row['Inhalt']); // \n in <br /> umwandeln
echo " </div>\n";
echo "</div>\n";
}
} else {
echo"<p>Keine News vorhanden</p>\n";
}
?>
Die CSS-Datei könnte man dann wie folgt erweitern. Da ich nicht so der Web-Designer bin, könnten die CSS-Angaben etwas 'billig' aussehen.
.newseintrag { border: 1px solid black; background-color: #EEEEFF; margin-bottom: 10px; } .newseintrag > .Datum { padding: 2px; float: left; white-space: nowrap; } .newseintrag > .Titel { padding: 2px; float: left; border-left: 1px solid darkgray; } .newseintrag > .Inhalt { padding: 2px; clear: both; border-top: 1px solid darkgray; }
Nun ist unser Newsscript fertig. Dies kann dann mit include eingebunden werden.
4. Nachteile
Dies ist wohl das schlechteste Newsscript was es gibt. Kein Multiusersystem, keine Kommentarfunktion, kein Adminbereich, kein "UBB-Code"-System und keine Blätterfunktion. Newseinträge kann man im moment nur mittels PHPMyAdmin hinzufügen, bearbeiten und löschen. Aber es ist ein funktionierendes Newsscript. Man muss "nur" die MySQL-Tabelle mit Daten füllen. Die Perfektionierung des Newssystems kommt vielleicht in einem späteren Kapitel.
Fragen zum aktuellen Thema
- Keine Übungsfragen
-
Zu diesem Kapitel gibt es keine Übungsfragen.