Forum Doku Wiki Blog

Forumsarchiv 2002, Dezember
Gästebuch

archivierte Beiträge lesen

  1. (PERL) Gästebuch von Arthur Müller, 21. 12. 2002, 10:09

Gästebuch

Der folgende Beitrag wurde am 21. 12. 2002, 10:09 Uhr von Arthur Müller veröffentlicht.

Leute, ich habe ein Problem mit dem Script für mein Gästebuch.
Der Script läuft zwar in der Consolle, aber macht dafür nichts auf der WEB-Seite. Anstatt der neuen Datei neu.html öffnet sich nach dem Absenden questbook.pl als eine Browser-Seite.
Vielleicht liege ich ja in einer ganz falscher Richtung mit diesem Script. Kann mir da jemand auf den richtigen Weg helfen.

Danke
Arthur

___________________________________________________________________
Mein Formular des Gästebuchs:
-------------------------------------------------------------------
<html>
<head>
<title>questbook</title>
</head>

<body bgcolor="black" text="yellow">

<form action="cgi-bin\guestbook.pl" name="questbook" target="_top" method="post" enctype="multipart/form-data">

<p><input type="text" name="name" value="&#60;Name&#62;" maxlength="20" size="20"></p>

<p><textarea name="kommentar" rows="5" cols="80">&#60;Kommentar&#62;</textarea></p>

<p><input type="submit" name="senden" value="Absenden"></p>

</form>

</body>
</html>

____________________________________________________________________
Hier ist der Script:
--------------------------------------------------------------------
#!usr/bin/perl -w

use CGI;
use strict;
use CGI::Carp qw(fatalsToBrowser);

my $cgi = new CGI;
my  @name = $cgi->param('name');
my @kommentar = $cgi->param('kommentar');
my @datei;
my @alt;
my @neu;
open(DATEI, "<neu.html");
@datei = <DATEI>;
close(DATEI);

foreach(@datei)
{push(@alt,$_)};
foreach(@name)
{push(@alt,$_)};
foreach(@kommentar)
{push(@alt,$_)};

foreach (@alt)
{if(/^<!-- NEU -->/)
{push(@neu,$_);}
push(@alt,"<!-- NEU -->\n");};

open(DATEI, "<neu.html");
$, = "<br>";
print "@neu";
close(DATEI);
--------------------------------------------------------------------

Gästebuch

Der folgende Beitrag wurde am 21. 12. 2002, 10:53 Uhr von Philipp Hasenfratz veröffentlicht.

Halihallo Arthur

> <form action="cgi-bin\guestbook.pl" name="questbook" target="_top" method="post" enctype="multipart/form-data">

Du sagst, dass guestbook.pl angezeigt wird und dir ist das nicht klar? - Hier steht's ja. Du übermittelst die Formulareingaben _an_ guestbook.pl, was dieses damit macht, ist seine Sache, aber das guestbook.pl bleibt in jedem Fall in der Adresszeile.

> my $cgi = new CGI;
> my  @name = $cgi->param('name');

my $name = $cgi->param('name');

oder hat eine Person mehrere Namen? - Du hast nur Eingabefeld namens 'name' im Formular, ein Array ist hier unlogisch.

> my @kommentar = $cgi->param('kommentar');

s. oben

> open(DATEI, "<neu.html");

du hast oben so schön mit einfachen Quotes gearbeitet, warum hier ein double quote? - Das ist aperformant.

> push(@alt,"<!-- NEU -->\n");};

hier macht der double quote frühestens Sinn!

> open(DATEI, "<neu.html");
> $, = "<br>";
> print "@neu";

das funktioniert zwar, print join('<br>', @neu) ohne das $,='<br>' wäre jedoch wesentlich schöner.

> close(DATEI);

Hier gibst du die neue neu.html aus. Warum meinst du, dass dies in der Adresszeile angezeigt werden soll? - Der Browser sieht nur eines, nämlich eine HTML Datei, die von _guestbook.pl_ kommt.
Zudem hast du den HTTP-Header vergessen => das führt immer zu einem Fehler. Du musst mindestens den Content-Type ausgeben, sonst weiss der Browser gar nicht, wie er deine Seite ausgeben soll.

also: print 'Content-Type: text/html'."\015\012" x 2;

am Anfang.

Viele Grüsse

Philipp

PS: Wenn du dich wunderst, warum keine neuen Postings gespeichert werden: Du musst @neu auch in der Datei speichern!

Gästebuch

Der folgende Beitrag wurde am 21. 12. 2002, 10:53 Uhr von i-netlab veröffentlicht.

hi,

> Leute, ich habe ein Problem mit dem Script für mein Gästebuch.
> Der Script läuft zwar in der Consolle, aber macht dafür nichts auf der WEB-Seite.

Genauso sieht der Code auch aus.

Tipps:
> my  @name = $cgi->param('name');

my $name ...

> open(DATEI, "<neu.html");

open () or die ();

Und damit was im Browser ankommt:
print "Content-type: text/html\n\n";
print "Danke...";

Rolf

Gästebuch

Der folgende Beitrag wurde am 21. 12. 2002, 11:57 Uhr von MudGuard veröffentlicht.

Hi,
> <form action="cgi-bin\guestbook.pl" name="questbook" target="_top" method="post" enctype="multipart/form-data">
Bei URLs ist / das Trennzeichen, nicht \

> my $cgi = new CGI;
> my  @name = $cgi->param('name');
Mehrere Namen? Wie soll das bei Deinem Formular gehen?

> my @kommentar = $cgi->param('kommentar');
Same here.
> my @datei;
> my @alt;
> my @neu;
> open(DATEI, "<neu.html");
> @datei = <DATEI>;
> close(DATEI);
>
> foreach(@datei)
> {push(@alt,$_)};
push(@alt,@datei);
wobei Du dieses sparen könntest, wenn Du die Datei direkt in @alt einlesen würdest.
> foreach(@name)
> {push(@alt,$_)};
push(@alt,@name)
bzw.
push(@alt, $name), denn Du hast ja eigentlich nur einen Namen, also keinen Grund, eine Liste aufzumachen.
> foreach(@kommentar)
> {push(@alt,$_)};
s.o.
> foreach (@alt)
> {if(/^<!-- NEU -->/)
> {push(@neu,$_);}
> push(@alt,"<!-- NEU -->\n");};
>
> open(DATEI, "<neu.html");
Jetzt liest Du schon wieder die Datei. Der Inhalt steht doch noch in @datei
> $, = "<br>";
> print "@neu";
Hier gibt Dein CGI etwas auf STDOUT, also an den http-Client, aus.
Aber vorher wurde kein http-header gesendet.
Außerdem könnte @neu hier sogar leer sein.
> close(DATEI);
> --------------------------------------------------------------------
cu,
Andreas


--
Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.

© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4