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="<Name>" maxlength="20" size="20"></p>
<p><textarea name="kommentar" rows="5" cols="80"><Kommentar></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);
--------------------------------------------------------------------
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!
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
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