In den Einsendeaufgaben werden Sie das Forumskript weiter verbessern. Ihre
Lösung sollten Sie auf den Webspace des Online- Lernsystems hochladen.
Teilaufgabe 1:
Bisher wurde zum Eintragen eines Textbeitrags ein HTML- Eingabefeld benutzt. Das
unterliegt aber großen Einschränkungen, zum Beispiel können keine mehrzeiligen
Beiträge eingegeben werden. Ihre Aufgabe soll es nun sein, statt des Eingabefelds einen
Eingabebereich zu benutzen.
Aber Achtung! Wenn ein Benutzer in einem mehrzeiligen Eingabebereich ein "Return",
also einen Zeilenumbruch eingibt, wird dieser in der Datei "beitraege.txt" mit abgespeichert.
Da ein Zeilenumbruch aber das Trennungsmerkmal zwischen einzelnen Beiträgen ist, kann es
zu Problemen kommen. Die Funktion str_replace
kann die Abhilfe schaffen.
Teilaufgabe 2:
Schaffen Sie eine Möglichkeit, zu einem Beitrag eine Betreffzeile einzugeben.
Diese Betreffzeile soll bei der Ausgabe fett dargestellt werden. Wird kein Betreff eingegeben,
soll der Text "kein Betreff" ausgegeben und gespeichert werden.
---
Meine Lösung:
Sie können den verbesserten Forumskript austesten.
Quelltext für Forumfunktionen
<?php
$beitraege = array();
beitrag_schreiben();
beitraege_einlesen();
chmod("beitraege.txt",0666);
/* -------------------------------
Funktion beitrag_schreiben
- überträgt die die Daten aus der Formulareingabe in die Datei "beitraege.txt"
Programmablauf:
1. Prüfung, ob im Formularfeld "Text" etwas eingegeben wurde
2. Die Datei "beitraege.txt" wird zum Schreiben geöffnet
Wenn diese Datei nicht existiert, wird am Bildschirm die entsprechende
Meldung ausgegeben
3. Prüfung, ob im Feld "Betreff" etwas eingegeben ist
Wenn ja, wird der Betreffstext in die erste freie Zeile geschrieben
Wenn nein, wird die Meldung "kein Betreff" in erste freie Zeile geschrieben
4. Der Beitragstext wird in die zweite Zeile geschrieben
Wenn im Text ein Zeilenumbruch erfolgt, soll es durch ein Leerzeichen
ersetzt werden.
5. Prüfung, ob im Feld "Autor" etwas eingetragen ist
Wenn ja, wird der Autor in die dritte Zeile geschrieben.
Wenn nein, wird die Meldung "unbekannt" in die dritte Zeile geschrieben.
6. Die Datei "beitraege.txt" wird gespeichert und geschlossen
----------------------------------*/
function beitrag_schreiben($datei = "beitraege.txt")
{
/* Schritt 1 */
if (!empty($_REQUEST['text']))
{
/* Schritt 2 */
$dh = fopen($datei, "a");
/* Schritt 2, Datei existiert nicht */
if (!$dh)
{
print "Kann Datei nicht erstellen!\n";
}
else
{
if ($_REQUEST['betreff'])
{
/* Schritt 3, Betreff wurde geschrieben */
fputs ($dh, $_REQUEST['betreff']."\n");
}
else
{
/* Schritt 3, Betreff wurde nicht geschrieben */
fputs ($dh, "kein Betreff \n");
}
$text = $_REQUEST['text'];
/* Zeilenumbruch durch Leerzeichen ersetzen */
$text_neu = str_replace("\r\n", "<br />", $text);
/* Schritt 4, Beitragstext schreiben */
fputs ($dh, $text_neu."\n");
if ($_REQUEST['autor'])
{
/* Schritt 5, Autor wurde geschrieben */
fputs ($dh, $_REQUEST['autor']."\n");
}
else
{
/* Schritt 5, Autor wurde nicht geschrieben */
fputs ($dh, "unbekannt \n");
}
/* Schritt 6 */
fclose ($dh);
}
}
}
/* -------------------------------
Funktion beitraege_einlesen
- liest die Daten aus der Datei "beitraege.txt" und speichert sie
Programmablauf:
1. Die Variable $beitraege wird als global definiert.
Zuvor wurde festgelegt, dass es sich um ein Array handelt.
2. Die Datei "beitraege.txt" wird zum Lesen geöffnet.
Wenn diese Datei nicht existiert, wird eine entsprechende Meldung ausgegeben.
3. Eine For- Schleife wird durchlaufen:
Anfangswert $i = 0;
Nach jedem Durchlauf wird $i um 1 erhöht
Die Schleife endet, wenn Dateiende "beitraege.txt" erreicht wird
4. Die erste Zeile in der Datei "beitraege.txt" wird eingelesen
5. Wenn die Zeile Inhalt hat, wird sie als "Betreff" gespeichert
6. Die zweite Zeile wird als "Beitragstext" gespeichert
7. Die dritte Zeile wird als "Autor" gespeichert
8. Datei "beitraege.txt" wird geschlossen
----------------------------------*/
function beitraege_einlesen($datei = "beitraege.txt")
{
global $beitraege;
$dh = fopen($datei, "r");
if(!$dh)
{
print "Kann Datei \"$datei\" nicht öffnen!\n";
}
else
{
for ($i = 0; !feof($dh); $i++)
{
$zeile = fgets($dh);
if ($zeile != "")
{
$beitraege[$i]['betreff'] = $zeile;
$beitraege[$i]['text'] = fgets ($dh);
$beitraege[$i]['autor'] = fgets ($dh);
}
}
fclose($dh);
}
}
/* -------------------------------
Funktion beitrag_ausgeben
- überträgt den aus der Funktion beitraege_einlesen gespeicherten Daten.
Die Daten sollen dann in der Datei "forum.php" ausgegeben werden.
Programmablauf:
1. Die Zeile "Betreff" wird fett geschrieben
2. Zeilenumbruch
3. Die Zeile "Text" wird geschrieben
4. Zeilenumbruch
5. Die Zeile "Autor" wird geschrieben
----------------------------------*/
function beitrag_ausgeben($beitrag)
{
print "<p><b>".$beitrag['betreff']."</b> \n</p>";
print "<p>".$beitrag['text']."\n</p>";
print "<p><i>".$beitrag['autor']."</i></p>\n";
}
?>
[Quelltext schließen]
Quelltext für Forum.php
<?php
require_once ("forumfunktionen.php");
?>
<html>
<head>
<title>Willkommen im Forum</title>
<meta name="author" content="Margarita Miagkova"/>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<style type="text/css">
h1
{
color: #5B0000;
font-style: italic;
}
b, i
{
color: #000080;
}
</style>
</head>
<body>
<h1>Willkommen beim Forum</h1>
<p><b>Sagen Sie uns Ihre Meinung</b></p>
<form method="post" action="<?php print $_SERVER['PHP_SELF'] ?>">
<table>
<tr>
<td>Betreff:</td>
<td><input type="text" name="betreff" size="50"/></td>
</tr>
<tr>
<td>Ihr Beitrag:</td>
<td><textarea cols="50" rows="10" name="text"></textarea></td>
</tr>
<tr>
<td>Name:</td>
<td><input type="text" name="autor" size="50"/></td>
</tr>
</table>
<input type="submit" value="Absenden"/>
</form>
<hr />
<?php
for ($i = count ($beitraege)-2; $i >= 0; $i--)
{
beitrag_ausgeben($beitraege[$i]);
print "<hr />\n";
}
/* -------------------------------
Die Funktion gibt alle Forumeinträge aus der Datei "beitraege.txt" aus
1. Es wird die Anzahl der Zeilen berechnet, davon 2 abgezogen (->Betreff)
2. Diese Zeile wird ausgegeben
3. Dann springe zur nächsten Zeile und diese ausgeben.
4. Dies geschieht solange, bis Dateianfang erreicht ist
===> Die Forumbeiträge werden in umgekehrter Reihenfolge ausgegeben,
d.h. der letzte Beitrag wird oben angezeigt
----------------------------------*/
?>
<p><b>Danke für Ihre Mithilfe!</b></p>
</body>
</html>
[Quelltext schließen]