Dynamische Homepage

Wechselnde Textausgaben
1. Bezogen auf die Uhrzeit
Viele Homepages haben eine Begrüßung, z.B. "Willkommen auf unserer Homepage!". Da wir aber PHP lernen, können wir jetzt eine tageszeitbedingte Begrüßung entwerfen. Wir nutzen die Funktion date(). Diese Funktion hat verschiedene Formate mit verschiedenen Bedeutungen. Hier der Überblick:

Platzhalter Ausgabe
g Stunden im Format 1-12
G Stunden im Format 0-23
h Stunde im Format 01-12
H Stunde im Format 00-23
i Minuten im Format 00-59
d Tag des Monats (zweistellig mit führenden Nullen)
D Tag der Woche (dreistellig, z.B. "Thu")
j Tag des Monats (ohne führende Nullen)
w numerische Darstellung des Wochentags (Sonntag = 0)
m Monat im Format 01-12
M Monat (dreistellig, z.B. "Mar")
n Monat ohne führende Null
y Jahreszahl (zweistellig)
Y Jahreszahl (vierstellig)
a am oder pm
Wir werden wohl nur zwei Platzhalter nutzen, genauer gesagt "a" und "H". Wir nutzen einen Array für die Begrüßungen, wobei auch drei Variablen möglich sind. Wir nennen den Array $begr[]. Also sieht das ganze vorerst so aus (der vollständige Code ist am Ende dieses Kapitels):
<?php
$begr[] = "Guten Morgen!";
$begr[] = "Guten Tag!";
$begr[] = "Guten Abend!";
?>
Jetzt nutzen wir eine if-Abfrage. Zuerst fragen wir, ob es am (Vormittag) oder pm (Nachmittag) ist. So geht's:
<?php
if (date("a") == "am")
{
  $be = $begr[0];
}
else if (date("H") >= 12 && date("H") < 18)
{
  $be = $begr[1];
}
else
{
  $be = $begr[2];
}
echo $be;
?>
So. Jetzt sollte eigentlich alles funktionieren. Hier noch einmal der gesamte Quellcode:
<?php
$begr[] = "Guten Morgen!";
$begr[] = "Guten Tag!";
$begr[] = "Guten Abend!";
if (date("a") == "am")
{
  $be = $begr[0];
}
else if (date("H") >= 12 && date("H") < 18)
{
  $be = $begr[1];
}
else
{
  $be = $begr[2];
}
echo $be;
?>


2. Bezogen auf den Zufall
PHP bietet die Möglichkeit, eine zufällige Zahl zu berechnen. Man benutzt dazu die Funktion mt_srand. Aber zuerst brauchen wir noch einen Array, aus dem dann eine Teilvariable ausgewählt wird. Nennen wir sie "$spruch".
<?php
$spruch[] = "Alles wird gut";
$spruch[] = "Wir machen nicht alles anders - aber vieles besser.";
$spruch[] = "Auf der Suche nach günstigem Webspace? Ich auch!";
$spruch[] = "Rauchen gefährdet die Gesundheit";
?>
Nun haben wir einen Array mit vier Sprüchen erstellt. Fehlt nur noch die Zufallsauswahl. Diese setzen wir unter den letzten Spruch vor das Ende des PHP-Teils. Das Script sollte dann so aussehen:
<?php
$spruch[] = "Alles wird gut";
$spruch[] = "Wir machen nicht alles anders - aber vieles besser.";
$spruch[] = "Auf der Suche nach günstigem Webspace? Ich auch!";
$spruch[] = "Rauchen gefährdet die Gesundheit";
mt_srand((double)microtime()*1000000);
$zufall = mt_rand('0',count($spruch)-1);
$ausgabe = $spruch[$zufall];
echo $ausgabe;
?>
Natürlich sind beliebig viele Array-Elemente definierbar. Wir haben aus Zeitgründen nur vier genommen. mt_rand gibt eine Zufallszahl zwischen dem Anfangswert (bei uns 0) und dem Endwert (bei uns count($spruch)-1, also 3) zurück. mt_srand erstellt einen internen Startwert für den Zufallsgenerator. Ein Ergebniswert wird hierbei nicht zurückgegeben.

Gästebuch
Gästebücher sind auf fast jeder Homepage zu sehen. Die Meisten davon sind aber von kostenlosen Anbietern, bei denen auch noch von oben bis unten Werbung hinzukommt.
PHP bietet die Möglichkeit, ein eigenes kleines Gästebuch zu erstellen. Man kann das auch mit MySQL machen, aber wir bleiben mal beim kleineren Kaliber: der Textdatei. Aber zuerst brauchen wir ein Formular. In unserem Beispiel hat dieses Formular folgende Bedienelemente:
- 2 Textfelder (für Name und E-Mailadresse)
- 1 Auswahlfeld (Betreff des Eintrags)
- 1 Textfeld (für den eigentlichen Eintrag)
Ohne viel Zeit für Erklärungen zu verschwenden, hier das Formular-Script:

<center><form action="eintragen.php" method="post">
<table border="0" width="50%">
<tr>
  <td class="text-right">Name:
  <td><input name="name" size="20">
<tr>
  <td class="text-right">E-Mailadresse:
  <td><input name="email" size="20">
<tr>
  <td class="text-right">Betreff:
  <td><select name="betreff" size="1">
      <option>Homepage</option>
      <option>Frage</option>
      <option>Downloads</option>
      <option>Sonstiges</option>
<tr>
  <td class="text-right" valign="top">Meinung:
  <td><textarea name="text" rows="7" cols="32"></textarea>
<tr>
  <td>&nbsp;
  <td><input type="submit" value="Eintragen!">
</table>
</form></center>
Das kann man unter einem beliebigen Namen speichern, außer eintragen.php, da diese Datei jetzt erstellt wird. Zuerst bedenken wir wieder: die Namen, die wir den einzelnen Feldern vergeben haben, können wir jetzt als Variablen benutzen. Das vereinfacht die Sache. Hier zuerst einmal das Script, die Erklärung steht darunter.
<?php
if ($name != "" && $text != "")
{
  $text = ereg_replace("<","&lt;",$text);
  $text = ereg_replace(">","&gt;",$text);
  $text = ereg_replace('\\\"',"&quot;",$text);
  $text = ereg_replace("\\\'","'",$text);
  $text = ereg_replace("#","~",$text);
  $text = ereg_replace("\n","<br>",$text);
  $text = ereg_replace("\r","",$text);

  $datei = fopen("eintraege.txt","a+");
  fputs($datei,$name."#".$email."#".$betreff."#".$text."\n");
  fclose($datei);
}
else
{
  echo "Die Daten sind noch nicht komplett! Der Name und das Textfeld müssen ausgefüllt sein!";
}
?>
Zuerst wird geprüft, ob $name und $text ausgefüllt sind. Ist das der Fall, werden einige Standardzeichen in $text durch ihre HTML-Synonyme ersetzt. Dann kommt der Hauptteil der Geschichte: man setzt eine Variable ($datei) auf fopen("datei.format","Modus") und öffnet so eine Datei. Die verschiedenen Modi und deren Folgen hier noch einmal übersichtlich:
r Erlaubt das Auslesen einer Datei.
w Schreibt in eine Datei und legt sie an, sofern sie nicht existiert.
a Hängt neue Daten an das Ende der Datei und legt eine Datei an, sofern sie nicht existiert.
r+ Schreibt Daten in eine Datei und liest die Daten aus.
w+ Schreibt Daten in eine Datei und liest die Daten aus, kreiert eine Datei, wenn sie nicht existiert, aber überschreibt Daten, sofern sie existiert.
a+ Schreibt Daten in eine Datei und liest die Daten aus, kreiert eine Datei, wenn sie nicht existiert. Neue Daten werden an das Ende der Datei gehängt.
In unserem Beispiel haben wir a+ genommen. Somit werden neue Daten an das Ende der Datei gehangen. Der nächste Befehl ist fputs. Dieser Befehl schreibt nun in $datei folgendes:
$name#$email#$betreff#$text
Hier ein Beispiel:
Susanne#[email protected]#Frage#Wann wird denn jetzt das Design geändert?
Die "#"-Zeichen erkläre ich später. Am Ende wird ein Zeilenumbruch durch "\n" erreicht, sodass jeder Eintrag in eine eigene Zeile kommt. Danach wird die Datei mit fclose geschlossen.

Die Daten sind jetzt gespeichert und müssen wiedergegeben werden. Das machen wir mit explode(). explode() zerlegt eine Datei in Stücke, wobei es dafür ein definiertes Trennzeichen verwendet. In unserem Fall "#". Das heißt also, dass jetzt jeder Teil einzeln als Variable zur Verfügung steht. Hier der Quellcode, um die Einträge anzeigen zu lassen (kann man unter das Formular setzen):
<?php
$eintrag = file("eintraege.txt");
$ausgabe = ""; $gesamt = count($eintrag)-1;
for ($i = $gesamt;$i>=0;$i--)
{
  $element = explode("#",$eintrag[$i]);
  $ausgabe .= "<table border='1' width='100%'>";
  $ausgabe .= "<tr><td width="50%"><b>Name:<td width="50%">".$element[0];
  $ausgabe .= "<tr><td><b>E-Mail:<td>".$element[1];
  $ausgabe .= "<tr><td><b>Betreff:<td>".$element[2];
  $ausgabe .= "<tr><td><b>Eintrag:<td>".$element[3];
  $ausgabe .= "</table>";
}
echo $ausgabe;
?>
Die Einträge werden jetzt in dieser Reihenfolge dargestellt: die Neuesten zuerst, dann immer älter.

Counter
Einen Counter programmieren ist recht einfach. Wir gehen ähnlich wie beim Gästebuch vor. Wir legen eine Datei an, in die wir den Counterstand eintragen lassen. Hier der Quellcode:

<?php
if (!file_exists("counter.txt"))
{
  fopen("counter.txt","a");
}
$counter = fopen("counter.txt","r+");
$aufruf = fgets($counter,20);
$aufruf = $aufruf + 1;
rewind($counter);
fputs($counter,$aufruf);
echo $aufruf;
fclose($counter);
?>
Wenn die Datei nicht existiert, wird sie angelegt. Dann werden die ersten 20 Stellen der Datei counter.txt ausgelesen durch fgets. 20 Stellen sollten für einen Counter genügen. Da es sich um eine Zahl handelt, kann mann jetzt zu dieser Zahl eins dazuzählen. Durch rewind wird der Cursor an die erste Stelle der Datei gesetzt. Mit fputs wird der neue Counterstand eingetragen und mit echo angezeigt. fclose Schließt dann die Datei wieder.