Quakenet/#php Tutorial

Hinweis: Wenn sie diese Seite von einer externen URL aufgerufen haben achten sie darauf das alle Kapitel aufeinander aufbauen. Stellen sie daher sicher dass sie alle vorherigen Kapitel gelesen haben, da sie sonst relevante Informationen übersehen.

Newsskript

  1. Eigenes Newsskript
  2. Aufbau der MySQL-Tabelle
  3. Das eigentliche Newsskript
  4. Nachteile vom Newsskript

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.

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.

Fragen zum Kapitel

Keine Fragen zum Kapitel vorhanden

Zurück zu Weiter zu
Copyright © bei den OPs von #php.de/QuakeNet Valid XHTML 1.0 Strict Valid CSS!