######################################################
sub seitezwei {
# Parameterdefinition für das zu übergebende Passwort
$pass = param("password");
# Entspricht das Passwort dem Passwort
if ($password eq $pass) {
# Hier wird nun die subroutine "sub header" eingebunden.
&header;
print qq~
Um eine neue Nachricht zu verfassen bitte den Text unterhalb eingeben:<br>
<form action="pass3.pl" method="POST">
<input type="hidden" name="action" value="seitedrei">
<input type="hidden" name="password" value="$pass">
Titel: <input type="text" name="titel" size=30><br>
Mitteilung:<br>
<textarea name="content" cols=50 rows=10>
</textarea><br>
<input type="submit" value="Nachricht posten">
<input type="reset" value="Reset">
</form>
~;
&footer;
# Hier wird nun die subroutine "sub footer" eingebunden.
} else {
&errorroutine;
}
}
######################################################
Erläuterungen zur Subroutine:
Hier in dieser Subroutine ist erstmal nur ein Formular hinzugekommen mit zwei Feldern. Das erste soll einen Titel der
News oder was auch immer darstellen, das andere den Haupttext.
Zu beachten wäre hier wieder das die action zur entsprechenden Subroutine zeigt wird und das Passwort übermittelt wird.
<input type="hidden" name="action" value="seitedrei">
<input type="hidden" name="password" value="$pass">
Subroutine 3, Daten empfangen und speichern
######################################################
sub seitedrei {
# Parameterdefinition für das zu übergebende Passwort
$pass = param("password");
$titel = param("titel");
$content = param("content");
# Entspricht das Passwort dem Passwort
if ($password eq $pass) {
# Hier wird nun die subroutine "sub header" eingebunden.
open(DATEN,">daten/nachrichten.dat");
flock(DATEN, 2);
print DATEN "$titel|$content\n";
close(DATEN);
&header;
print qq~
Subroutine 3<br>
Die Nachricht wurde gespeichert. Folgender Wortlaut wurde gespeichert:<br>
<hr>
Titel: <b>$titel</b><br>
Inhalt:<br> $content<br>
~;
&footer;
# Hier wird nun die subroutine "sub footer" eingebunden.
} else {
&errorroutine;
}
}
######################################################
Erläuterungen zur Subroutine:
Zuerst werden mittels
$titel = param("titel");
$content = param("content");
die Parameter an die Subroutine übergeben. Ohne die weiss das Script ja nicht um was es denn geht ;-)
Nun wird die Datei geöffnet und die Daten werden hier Zeilenweise geschrieben, getrennt durch den Datensatztrenner |
open(DATEN,">daten/nachrichten.dat");
flock(DATEN, 2);
print DATEN "$titel|$content\n";
close(DATEN);
Hier in dem Beispiel muss die Datei existieren und Schreibrechte haben. Auch wird durch das > festgelegt das der Inhalt der Datei bei jedem neuen
eintragen einer Information überschrieben wird! Will man die Texte dagegen an das Ende der Datei anhängen muss man open(DATEN,">> ...
schreiben.
So, und zum Schluss wird der Wortlaut nocheinmal zu Kontrolle ausgegeben.
Die Nachricht wurde gespeichert. Folgender Wortlaut wurde gespeichert:<br>
<hr>
Titel: <b>$titel</b><br>
Inhalt:<br> $content<br>
Userbereich mit Datenausgabe
######################################################
sub userdaten {
# Parameterdefinition für das zu übergebende Passwort
# Achtung, hier sind andere Variablen anzuwenden
$pass = param("userp");
# Entspricht das Passwort dem Passwort
# Achtung, hier sind andere Variablen anzuwenden
if ($userp eq $pass) {
open(DATEN,"daten/nachrichten.dat");
while (<DATEN> ){
chomp;
my @daten = split(/\|/,$_);
$titel = $daten[0];
$content = $daten[1];
}
close(DATEN);
print "Content-type: text/html\n\n";
print qq~
<html>
<head><title>Userbereich</title></head>
<body>
Das ist der Userbereich, dieser kann wiederum ganz anders gestaltet sein.<br><br>
<hr>
<b>Titel:</b> $titel<br>
<b>Inhalt:</b><br>$content
<br><br><a href="pass3.pl">Logout</a>
</body>
</html>
~;
} else {
.... Rest der Subroutine
Erläuterungen zur Subroutine:
Hier im Userbereich wird zuerst die Datei zum lesen geöffnet und in ihre Bestandteile zerlegt.
while (<DATEN> ) ist ein Schleife mit einem Bedingungsausdruck. Darunter folgt dann
der Anweisungsblock mit den Kommandos was denn hier geschehen soll.
chomp zu gut Deutsch "nagen" entfernt die Zeilenvorschübe am Zeilenende
@daten = split(/\|/,$_); Festlegung bei wie die Datensätze getrennt sind. Datensatztrenner können ganz unterschiedlich notiert werden.
So ist es kein Problem auch mit |!| einen Datensatz zu trennen. Wichtig ist nur bei verschiedenen Dateioperationen dann immer den selben Datensatztrenner zu verwenden.
Ein sehr wichtiger Hinweis an dieser Stelle.
Schreiben verschiedene User Daten in eine Datei die mit | oder anderen Zeichen getrennt ist sollte man aufpassen das
ein User, wenn er denn versehentlich eines der Trennzeichen benutzt, dies nicht den Datensatz zerstört. Dies ist wichtig wenn z.B. Code gepostet wird.
Denn wenn ein User dann ein solches Zeichen in den Text setzt wird dies als Datensatztrenner vom Script angesehen.
Dann könnte es so aussehen erster Text|zweiterText mit | in der Mitte Jeder wird nun sehen das es plötzlich nicht zwei sondern 3 Datensätze gibt, wovon aber
der eine garnicht gewollt oder erlaubt ist.
Solche Eingaben kann man mit Mustervergleichen und entsprechenden Ersetzungen abfangen.
Hier würde ein Eintrag in das Feld daraufhin geprüft ob ein | Zeichen vorhanden ist und in
das entsprechende Dezimalzeichen umgewandelt
$eintrag =~ s/\|/|/g; Nachzulesen sind diese Zeichen in Selfhtml.
open(DATEN,"daten/nachrichten.dat");
while (<DATEN> ){
chomp;
my @daten = split(/\|/,$_);
$titel = $daten[0];
$content = $daten[1];
}
close(DATEN);
Nun werden die Datensätze mit einer Zahl versehen
$titel = $daten[0];
$content = $daten[1];
Bitte beachten das Perl bei 0 anfängt zu zählen!
Zum Schluss wird dann das ganze ausgegeben:
<b>Titel:</b> $titel<br>
<b>Inhalt:</b><br>$content
Auch hier gibt es eine Demo Datei zum testen...
|