Fokuhila: Gaestebuch

Beitrag lesen

[...]

also, wieso wird hier die gaestebuch.html mit dem Eintrag ueberschrieben, statt den Gaestebucheintrag hinter das <!--begin-->

for ($i=0;$i<=$SIZE;$i++) {
   $_=$LINES[$i];
   if (/<!--begin-->/) {

Dieser reguläre Ausdruck prüft nur, ob <!--begin--> vorhanden ist. Wenn ja, wird sofort losgeschrieben.

print OUTFILE "

zu schreiben ? mit >>$outfile statt >$outfile wuerde ja das abschließende </body></html> am ende der gaestebuch.html an der falschen stelle sein, da die Eintraege einfach an das ende der datei angehaengt werden wuerden, aber wieso wird die gaestebuch.html mit >$outfile gerade ersetzt ?

Schau doch die Argument an, die du open() übergibst! Da steht weder ">$outfile", noch ">>$outfile", sondern

"open(FILE,"$outfile")

Du hast also den Modus zum Öffnen der Datei nicht spezifiziert. Wolltest du aber! Siehe hierzu </selfhtml/tgcj.htm>.

Hier ein sinnvoller Regexp:

s/<!--begin-->/&eintrag<!--begin-->/ while (OUTFILE);

OUTFILE muss zum Lesen _und_ Schreiben offen sein

sub eintrag {
return <<"FERTIG";
<p>
  Am $date schrieb <b>$in{'username'}</b>
  (E-Mail: <a href=mailto:$in{'email'}>$in{'email'}</a>)
  das folgende in unser Gästebuch.
</p><p>
  Kommentar:<br>
  <b>$in{'Kommentar'}</b>
</p><p>
  Homepage: <a href="$in{'website'}">$in{'website'}</a>
</p><p>
  <div align="right">
    <font size="-2">IP: $ENV{'REMOTE_ADDR'}</font>
  </div>
</p>
<hr size=1>
FERTIG
}

Deine vielen \n kannst du dir übrigens sparen. Sie sind i.d.R.

nur im HTML-Quelltext, jedoch nicht im formatierten TExt zu sehen.

[...]


So, und jetzt muss ich dir doch (so leid es mir tut) einen kleinen Anschiss erteilen: Warum zum Hacker benutzt du weder CGI.pm noch Hier-Dokumente?! Mit CGI.pm wäre alles _viel_ einfacher. Du könntest dir u.a. die Subroutine &parse_form sparen. Und &eintrag wäre auch übersichtlicher:

sub eintrag {
  my $eintrag = '';

$eintrag .= p(
      "Am $date schrieb", # Variableninterpolation
      b( param('username') ),
      '(E-Mail:',
      a({ -href => "mailto:param('email')" },# Variableninterpolation
          param('email')
      ),
      'das Folgende in unser Gästebuch:'
  );# Der erste Absatz ist jetzt fertig.

$eintrag .= p(
     'Kommentar'. #Stringverkettung
     br().              #Stringverkettung
     'Kommentar:'.#Stringverkettung
     br().              #Stringverkettung
     b( param('Kommentar') )
  );# Zweiter Absatz ist fertig.

$eintrag .= p(
     'Homepage:',
     a({ -href => $param('website) },
       $param('website)
     )
  );# dritter Absatz ist fertig.

$eintrag .= p(
    div({ -align => 'right' },
      font({ -size => 2 },
         'IP:',
         $ENV{'REMOTE_ADDR'}
      )# Ende des font-Tags
    )# Ende des div-TAgs
  );# Ende des dritten Absatzes.

$eintrag .= hr({ size => 1 });

return $eintrag;
}

mfg: <a href="http://www.8ung.at/hellofweb">azrael</a>

Hell of Web ;-) :-o