Aktuelles
Startseite
TP Wettbewerbe
Sitemap
Service
Hilfe-Forum
Kolumnen
Linktipps
Buchrezensionen
Traum-Team
Newsletter
Traumquelle
Dreamweaver
Fireworks
Photoshop
Flash
Traum-Start
gimp
GoLive
php / Apache
Sonstige
Grundlagen
Usability
CSS
Apple / Mac
3D
Intern
TP-Sponsor
TP SHOP
Bild Galerie
TP Wallpapers
Forum-Archiv
Link zu uns
Impressum
Zurück  
TP Portal > php / Apache > Newssystem mit PHP und mySQL (Teil III - Ausgabe der News)

Newssystem mit PHP und mySQL (Teil III - Ausgabe der News)

Dieser Kurs ist eine Einführung in PHP und mySQL. Die nötigen Grundlagen werden anhand der Planung und Umsetzung eines Newssystem besprochen. So lernt man das nötige Handwerkszeug, um zukünftig eigene Projekte umzusetzen.

In diesem Teil

Im dem dritten Teil dieses Kurses geht es um die Ausgabe der News auf der Homepage. Dabei werde zwei Möglichkeiten angesprochen. Zum einen die Möglichkeit alle News auszugeben und zum anderen die Möglichkeit nur eine bestimmte Anzahl von Nachrichten anzeigen zu lassen.

News auf der Homepage ausgaben

In der Regel wird es so sein, dass man die News auf einer schon bestehenden Internetseiten ausgaben will. Darum wird hier die Möglichkeit gezeigt wie man die News über Templates ausgeben kann. Zunächst wird eine neue Datei angelegt. Die neue Datei steht symbolisch für die schon vorhandene Internetseite auf der die Nachrichten angezeigt werden sollen. Da in dieser Seite auch PHP ausgeführt werden soll, muss die Dateiendung .php lauten. Eine entsprechende HTML-Seite muss also umbenannt werden. Alternativ gibt es die Möglichkeit PHP-Code auch in HTML-Seiten auszuführen. Dazu müssen Einstellungen in der php.ini oder alternativ der .htaccess Datei gemacht werden. Wer das möchte sollte sich eine Anleitung hierzu in Internet ansehen.

Die Datei ausgabe.php wird im Ordern in dem auch der Ordern tpnews erstellt wurde gespeichert.

Codebox 3.1 :: Ausgangs-HTML-Seite mit PHP-Code (ausgabe.php
head
titleAlte HTML Seite/title
/head
 
body
<? include ("tpnews/inc/hp_ausgabe.inc.php"); ?>
/body
/html

Die Zeile die in die Ausgangsdatei eingefügt werden muss ist <? include ("tpnews/inc/hp_ausgabe.inc.php"); ?> . Wie schon in den vorherigen Teilen angesprochen wird so der Inhalt der Datei hp_ausgabe.inc.php an dieser Stelle eingebunden und ausgeführt und das ohne, dass die Datei unübersichtlich wird.

Die Datei hp_ausgabe.inc.php

Werfen wir eine Blick auf diese Datei. Die Datei wird in dem Unterordner inc gespeichert.

Codebox 3.2 :: hp_ausgabe.inc.php
<?
include ("tpnews/inc/opendb.inc.php"); // DB öffen
// Auslesen der News
$q_select="SELECT * FROM tp_news ORDER BY startdatum DESC, startzeit DESC ";
$r_select=mysql_query($q_select);
while ($strAusgabe=mysql_fetch_array($r_select, MYSQL_ASSOC))
{
    // Einlesen der Vorlage news.inc.php
    $strVorlage="";
    $arrVorlageZeilen=file("tpnews/tpl/news.inc.php");
    // Zusammensetzen der Vorlage
    foreach ($arrVorlageZeilen as $Vorlage) { $strVorlage.=$Vorlage; }
    // Datum zusammenstellen
    $intDatePart=explode("-", $strAusgabe[startdatum]);
    $strDatum=$intDatePart[2].".".$intDatePart[1].".".$intDatePart[0]." ".$strAusgabe[startzeit];
    // Ersetzen der Platzhalter ##NAME##
    $strVorlage=ereg_replace("##DATUM##",$strDatum,$strVorlage);     
    $strVorlage=ereg_replace("##AUTOR##",$strAusgabe[autor],$strVorlage);     
    $strVorlage=ereg_replace("##TITEL##",$strAusgabe[titel],$strVorlage);     
    $strVorlage=ereg_replace("##NACHRICHT##",$strAusgabe[nachricht],$strVorlage);     
    // Augabe der News
    echo $strVorlage;  
}
?>

Zunächst wird wieder die Datei opendb.inc.php mit include eingelesen. Der Pfad zu der Datei geht dieses mal aber von der Datei ausgabe.php aus und startet daher mit "tpnews/inc/". Die Nachrichten, die mit den letzten Kursteil gespeichert wurden, werden hier mit eine SQL-Befehl ausgelesen. Dieser lautet SELECT * FROM tp_news ORDER BY startdatum DESC, startzeit DESC. Mit dem SQL-Befehl SELECT werden Daten aus der Datenbank gelesen (vgl. Teil 1). Hier werden * = alle Daten aus der Tabelle (FROM) tp_news eingelesen. Der Teil SELECT * FROM tp_news würde also schon reichen um alle Nachrichten aus der Datenbank auszulesen. Bei den Nachrichten ist es aber wichtig in welcher Reihenfolge die Datensätze auf der Internetseite angezeigt werden. Daher benutzt man an dieser Stelle ORDER BY was eine Sortierung der Daten bewirkt. Gibt man mehrere Spaltennamen mit Komma getrennt an, werden die Daten zunächst nach den ersten Sortiert, dann nach den Folgenden. In diesem Fall sortiert man zunächst nach dem Datum (startdatum) und danach nach der Zeit (startzeit) die man bei der Eingabe angegeben hat. Der Zusatz DESC bewirkt, dass die Daten nicht wie normal Aussteigend sortiert werden, sondern absteigend. Das größte = jüngste Datum steht am Beginn und somit die neuste News oben.

Wiederholend zu Teil 1 wird dieser SQL-Query die Datensätze dann über mysql_query und die while-Schleife mit mysql_fetch_array in ein Array eingelesen. Über den Zusatz MYSQL_ASSOC stehen uns die Daten dann in dem Array $strAusgabe über die Spaltennamen zur Verfügung.

Als nächstes betrachten wir was innerhalb der while-Schleife mit den Daten aus der DB geschieht. Als erstes erstellt man eine neue Variable. In $strVorlage wird im nächsten Schritt die Vorlage Datei news.inc.php eingelesen. Eh ich auf den Sinn dieser Aktion eingehe hier der Inhalt von news.inc.php (welche im Ordner tpl zu erstellen ist):

Codebox 3.3 :: tpl/news.inc.php
<p><b>##TITEL##</b> <font size="-1">am ##DATUM## von ##AUTOR##</font></p>
<p>##NACHRICHT##<hr>
</p>

Die Datei beinhaltet HTML-Code der nötig ist um die News auszugeben. Hier ist es eine einfache Konstruktion, die in der Datei ausgabe.php (Codebox 3.1) an der Stelle an der <? include ("tpnews/inc/hp_ausgabe.inc.php"); ?> steht pro News 1 mal ausgegeben wird. Die Datei kann beliebig verändert werden, es sind also auch Tabellenzeilen oder andere anpassungen an gewünschte Layout möglich. Wichtig ist, dass die Variablen die in "##" eingeschlossen sind erhalten bleiben. Diese werden später durch den entsprechenden Wert aus der DB ersetzt.

Jetzt aber zurück zu dem Code aus der Codebox 3.2. Die Zeile $arrVorlageZeilen=file("tpnews/tpl/news.inc.php"); liest den Inhalt der Datei news.inc.php zeilenweise in das neue Array ein. Über die nächste Zeileforeach ($arrVorlageZeilen as $Vorlage) { $strVorlage.=$Vorlage; } werden die einzelnen Zeilen in der Variable $strVorlage zusammengefasst. Dabei wird mit foreach alle Zeilen des Array durchgegangen und über .=an die Zielvariable angehangen. Jetzt ist auch zu verstehen, warum die Variable zuvor angelegt bzw auf ="" gesetzt werden muss. Kommentiert man Probeweise die Zeile $strVorlage=""; mit // aus, sieht man das die erste News einmal abgedruckt wird, die zweite zweimal etc.

Als nächstes muss man aus den beiden Datensätzen Startzeit und Startdatum, die man in Teil 2 in mySQL konforme Anzeigen umgewandelt hat wieder in das Wunschformat umschrieben. Hier wird die Ausgabe auf TT.MM.JJJJ HH:MM:SS gesetzt. Es ist aber auch jedes andere Format möglich, welches dann mit den erworbenen Wissen erstellt werden kann. Wichtig ist, das das Ergebnis in der Variable $strDatumlandet.

Im Anschluss werden die Platzhalter in der Datei news.inc.php durch die entsprechenden Werte ersetzt. Dieses erfolgt über die Zeilen $strVorlage=ereg_replace("##AUTOR##",$strAusgabe[autor],$strVorlage);. Die Variablen werden zum besseren Verständnis man durch eine Erläuterung ersetzt: Variable_in_der_das_Ergebniss_steht = ereg_replace("PLatzhalter_in_news.inc.php",Daten_aus_der_DB,Datei_in_der_nach_dem_PLatzhalter_gesucht_wird);

Sind dann als Platzhalter ersetzt, wird die Variable über echo ausgegeben und erscheint so auf der Internetseiten. Dieser Vorgang wird für alle Datensätze wiederholt.

Nur die neusten News ausgeben

An einigen Stellen ist es sinnvoll nur ein paar News auszugeben. So beispielsweise auf der Homepage. Dort stehen dann die zwei neusten Nachrichten und allen anderen auf einer Unterseite. Mit zwei einfachen Modifikationen ist auch das möglich. Anstelle der Datei ausgabe.php (die steht jetzt für die Unterseite mit allen News) erstellen wir im gleichen Ordner noch eine weitere Datei. Diese wird teilausgabe.php genannt.

Codebox 3.4 :: teilausgabe.php
head
titleAlte HTML Seite/title
/head
 
body
<? include ("tpnews/inc/hp_teilausgabe.inc.php"); ?>
/body
/html

Der Unterschied zur Datei ausgabe.php besteht nur darin, das hier die Datei hp_teilausgabe.inc.php included wird. Diese Datei muss auch angelegt werden.

Codebox 3.5 :: hp_teilausgabe.inc.php
<?
include ("tpnews/inc/opendb.inc.php"); // DB öffen
include ("tpnews/inc/config.inc.php"); // Config-File einlesen
// Auslesen der News
$q_select="SELECT * FROM tp_news ORDER BY startdatum DESC, startzeit DESC LIMIT 0,$intNewsAnz";
$r_select=mysql_query($q_select);
while ($strAusgabe=mysql_fetch_array($r_select, MYSQL_ASSOC))
{
    // Einlesen der Vorlage news.inc.php
    $strVorlage="";
    $arrVorlageZeilen=file("tpnews/tpl/teilnews.inc.php");
    // Zusammensetzen der Vorlage
    foreach ($arrVorlageZeilen as $Vorlage) { $strVorlage.=$Vorlage; }
    // Datum zusammenstellen
    $intDatePart=explode("-", $strAusgabe[startdatum]);
    $strDatum=$intDatePart[2].".".$intDatePart[1].".".$intDatePart[0]." ".$strAusgabe[startzeit];
    // Ersetzen der Platzhalter ##NAME##
    $strVorlage=ereg_replace("##DATUM##",$strDatum,$strVorlage);     
    $strVorlage=ereg_replace("##AUTOR##",$strAusgabe[autor],$strVorlage);     
    $strVorlage=ereg_replace("##TITEL##",$strAusgabe[titel],$strVorlage);     
    $strVorlage=ereg_replace("##NACHRICHT##",$strAusgabe[nachricht],$strVorlage);     
    // Augabe der News
    echo $strVorlage;  
}
?>

Auch diese Datei unterschiedet sich nicht wesentlich von der Ursprungsdatei. Daher wird hier nur auf die Änderungen eingegangen.

Zusätzlich zu der opendb.inc wird über die Zeile include ("tpnews/inc/config.inc.php"); ein Configfile eingelesen in dem ab jetzt alle vom Admin veränderbaren Variablen eingetragen werden. In diesem Teil ist die Datei noch nicht groß. In den nächsten wird sie aber anwachsen. So ein Configfile hat den Vorteil, dass man alle Einstellungen an einem zentralen Ort vornehmen kann. Die spätere Suche, wo ändere ich was bleibt aus. Die Datei config.inc.php muss jetzt auch angelegt werden.

Codebox 3.6 :: config.inc.php
<?
// Anzahl der News in der Teilausgabe
$intNewsAnz = 2; 
?>

Es empfiehlt sich die Datei ausführlich zu kommentieren. Nur so kann später auch ein anderer (eventuell ein nicht-Programmierer) Einstellungen ändern.

Einzige weitere Änderung in der Datei teilausgabe.inc.php im Vergleich zu hp_ausgabe.inc.php ist das an den mySQL-Befehl SELECT noch LIMIT 0,$intNewsAnz angehangen wird. Über LIMIT kann man die Anzahl der Datensätze die ausgegeben werden begrenzen. Man gibt den Startdatensatz an gefolgt von der Anzahl. Starten wollen wir immer bei Datensatz 0. Da die Zählung immer bei 0 beginnt ist das der erste vorhandene Datensatz. Die Anzahl der Datensätze ist in der Variable $intNewsAnz in der Datei config.inc.php angegeben.

Der restliche Code dieser Datei ist (im Prinzip) unverändert.

Einzige weitere Änderung ist, dass nicht die Templatedatei news.inc.php eingelesen wird, sondern die teilnews.inc.php. So kann das Layout der Nachrichten auf der Homepage anders gestaltet werden, als die auf der Newsseite.

Codebox 3.7 :: tpl/teilnews.inc.php
<p><b>##TITEL##</b><br>
##NACHRICHT##</p>
</p>

In diesem Fall über ein verkürzte Ausgabe, die nicht alle Variablen verarbeitet.

Ausblick

Jetzt kann man die in Teil 2 in die Datenbank geschriebenen Datensätze auslesen. Im den nächsten Teilen wird dann gezeigt wie man News löschen kann, diese Editieren kann und wie man bei vielen Nachrichten eine seitenwiese Ausgabe der Nachrichten erreichen kann.

Befehlsliste

An dieser Stelle werden die, in dem jeweiligen Teil neu besprochenen PHP und mySQL-Befehle aufgelistet. Die Befehle sind ggf. mit der entsprechenden Seite auf der offiziellen Dokumentation verlinkt.

PHP PHP mySQL
$variable @ INSERT
echo if / else / ifelse   SELECT
while die UPDATE
mysql_connect mysql_select_db WHERE
mysql_error() mysql_query CREATE TABLE  
mysql_fetch_array MYSQL_ASSOC   auto_increment  
// und /* */   include   NULL / NOT NULL
$_POST / $_GET   $PHP_SELF   UNIQUE KEY
date()   htmlentities()   PRIMARY KEY  
htmlspecialchars()   nl2br()   tinytext  
preg_replace()   explode()   longtext  
checkdate()   ereg_replace neu text  
foreach neu   time  
    datetime  
    date  
    ORDER BY neu
    DESC neu
    LIMIT neu

Zum Autor

Sebastian Lauff ist Diplom-Ingenieur der Fachrichtung Architektur. Seit 1996 arbeitet er angestellt und frei im Bereich Web-Entwicklung. Weitere Informationen zu Ihm findet man unter dem URL lauff.info.

Anfragen und Anregungen zu diesem Kurs bitte unter tp@lauff.info.

Buchrezension

Coverimage
AJAX Hacks
Dynamische Webseiten mit AJAX programmieren - dieses Handbuch bietet einen praktischen Einblick.
[mehr]
Gimahhot - Shopping
TP-Partner
Sprachreise London
Webmasterpro
Computerhilfen
Computerhilfen
Eventagentur Hamburg
it-rechtsinfo.de
Designguide
Getreidemühlen
sk-typo3
Kochkurs Berlin
Maandiko.de
d. Webdesigner
PSD Tutorials
Medizin
Handy Forum

Hier könnte Ihre Werbung stehen

 >> INFO << 

\ Startseite | Forum | Impressum | nach oben | Seite zurück /