1. Eigenes Newsskript
Unser Newsskript soll einfach implementiert werden und dabei den HTML-Code quick'n'dirty ausgeben. Es wird dabei eine Standalone-Version, kann und sollte also nicht mit include in einen anderen Bereich reingeladen werden.
2. Aufbau der MySQL-Tabelle
Aus der Datenbank löschen wir die alte News-Tabelle mit phpMyAdmin
oder mit dem Befehl DROP TABLE News;
. Nun überlegen wir was wir alles
für Spalten brauchen.
-
ID
- Eine Spalte zur Identifizierung eine News. Diese Spalte wird vom TypINT
sein und bekommt die Attribute UNSIGNED, NOT NULL, AUTO_INCREMENT und PRIMARY KEY. -
Titel
- Diese Spalte enthält den Titel der News und ist vom TypVARCHAR(100)
, 100 Zeichen müssten eigentlich reichen. Da der Titel angegeben werden muss sollte auch diese Spalte das Attribut NOT NULL haben. -
Datum
- Diese Spalte speichert den Erstellungszeitpunkt der News und ist daher vom TypDATETIME
und auch wieder mit dem Attribut NOT NULL. -
Inhalt
- Diese Spalte enthält den eigentlichen Text der News. Auch wennText
ein treffender Name für diese Spalte ist istTEXT
jedoch ein MySQL-Schlüsselwort und kann (bzw. sollte) nicht verwendet werden. Den Typ dieser Spalte setzen wir aufTEXT
da eine News wohl mehr als 255 Zeichen haben wird. Auch hier gilt wieder: Attribut NOT NULL.
Beachtet das die NOT NULL nicht verhindern einen leeren String anzugeben, sie verhindern nur das überhaupt kein Wert angegeben wird (eben diesen NULL-Wert). Diese Tabelle kann man nun über phpMyAdmin oder per Hand mit einem SQL-Query hinzufügen.
CREATE TABLE News( ID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, Titel VARCHAR(100) NOT NULL, Datum DATETIME NOT NULL, Inhalt TEXT NOT NULL );
Er ist also fast wie die alte News-Tabelle. Eigentlich hätten wir auch die alte Tabelle nehmen können, wir fangen hier jedoch bei Null an.
3. Das eigentliche Newsskript
Nun schreiben wir das eigentliche Newsskript. Wie immer setzen wir das Error-Reporting hoch, damit wir alle Fehlermeldungen angezeigt bekommen.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
?>
Dann bauen wir die Datenbank-Verbindung auf.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// die MySQL-Daten entsprechend anpassen
$db = @new MySQLi('localhost', 'username', 'pass', 'dbname');
if (mysqli_connect_errno()) {
die('Konnte keine Verbindung zu Datenbank aufbauen, MySQL meldete: '.mysqli_connect_error());
// ist zwar keine saubere Fehlermeldung aber ist ja auch nur ne einfache Inplementierung
}
?>
Und nun gehts los. Zuerst geben wir den HTML-Header-Code aus. Dies machen wir aber nicht in dieser Datei sondern in einer extra Datei, die wir dann mit include laden.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// die MySQL-Daten entsprechend anpassen
$db = @new MySQLi('localhost', 'username', 'pass', 'dbname');
if (mysqli_connect_errno()) {
die('Konnte keine Verbindung zu Datenbank aufbauen, MySQL meldete: '.mysqli_connect_error());
// ist zwar keine saubere Fehlermeldung aber ist ja auch nur ne einfache Inplementierung
}
include 'header.html'; // DOCTYPE, <html>, <head>, und was dazugehört
// inclusive den <body>-Tag
?>
Nun senden wir den SQL-Query und geben in einer Schleife die Daten aus.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// die MySQL-Daten entsprechend anpassen
$db = @new MySQLi('localhost', 'username', 'pass', 'dbname');
if (mysqli_connect_errno()) {
die('Konnte keine Verbindung zu Datenbank aufbauen, MySQL meldete: '.mysqli_connect_error());
// ist zwar keine saubere Fehlermeldung aber ist ja auch nur ne einfache Inplementierung
}
include 'header.html'; // DOCTYPE, <html>, <head>, und was dazugehört
// inclusive den <body>-Tag
$sql = 'SELECT
Titel,
Datum,
Inhalt
FROM
News
ORDER BY
Datum DESC';
// "ORDER BY" damit die Datensätze nach der Datumsspalte sortiert werden, absteigend
$result = $db->query($sql);
if (!$result) {
die ('Konnte den Folgenden Query nicht senden: '.$sql."<br />\nFehlermeldung: ".$db->error);
}
if (!$result->num_rows) {
echo '<p class="info">Es sind keine Newsbeiträge vorhanden</p>';
} else {
while ($row = $result->fetch_assoc()) {
echo '<h1>'.$row['Titel']."</h1>\n";
echo '<h2>'.$row['Datum']."</h2>\n";
echo '<p>'.$row['Inhalt']."</p>\n";
}
}
?>
Und dann geben wir am Ende noch den HTML-Footer aus. Den laden wir auch mit einem include.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// die MySQL-Daten entsprechend anpassen
$db = @new MySQLi('localhost', 'username', 'pass', 'dbname');
if (mysqli_connect_errno()) {
die('Konnte keine Verbindung zu Datenbank aufbauen, MySQL meldete: '.mysqli_connect_error());
// ist zwar keine saubere Fehlermeldung aber ist ja auch nur ne einfache Inplementierung
}
include 'header.html'; // DOCTYPE, <html>, <head>, und was dazugehört
// inclusive den <body>-Tag
$sql = 'SELECT
Titel,
Datum,
Inhalt
FROM
News
ORDER BY
Datum DESC';
// "ORDER BY" damit die Datensätze nach der Datumsspalte sortiert werden, absteigend
$result = $db->query($sql);
if (!$result) {
die ('Konnte den Folgenden Query nicht senden: '.$sql."<br />\nFehlermeldung: ".$db->error);
}
if (!$result->num_rows) {
echo '<p class="info">Es sind keine Newsbeiträge vorhanden</p>';
} else {
while ($row = $result->fetch_assoc()) {
echo '<h1>'.$row['Titel']."</h1>\n";
echo '<h2>'.$row['Datum']."</h2>\n";
echo '<p>'.$row['Inhalt']."</p>\n";
}
}
include 'footer.html'; // </body>, </html> und vielleicht noch irgendwelche copyright notes
?>
Somit ist unser einfaches Newsskript fertig.
4. Nachteile vom Newsskript
Im Moment können wir nur neue Newsbeiträge hinzufügen indem wir in der Datenbank
selbst arbeiten. Dies können wir entsprechend wie gewohnt über phpMyAdmin machen.
Dabei wählen wir einfach Insert und geben die Daten für den neuen
Datensatz ein. Die ID
-Spalte lassen wir leer und für
die Datum
-Spalte wählen wir die Funktion NOW()
aus der
Dropdown-Liste. Somit müssen wir also immer in phpMyAdmin um die Newsbeiträge zu
bearbeiten, ganz zu schweigen von fehlenden Kommentarfunktionen für Besucher.
Aber wie gesagt, es ist nur eine einfache Implementierung eines Newsskripts.