quakenet:#php Tutorial

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
  2. Grundgerüst
  3. Das eigentliche Newsscript
  4. Nachteile

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

  1. Keine Übungsfragen
Keine Übungsfragen

Zu diesem Kapitel gibt es keine Übungsfragen.

Nach oben