[CGI] Gaestebuch

Big_Fish

Mitglied
Hab ein Gästebuch gemacht.

Cgi-Lib.pl

sub parse_form {
local ($buffer, @pairs, $pair, $name, $value);
# Read in text
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "POST")
{
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
else
{
$buffer = $ENV{'QUERY_STRING'};
}
@pairs = split(/&/, $buffer);
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$in{$name} = $value;
}
}
1;




datum.pl

sub ctime {
@DoW = ('Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag');
@MoY = ('Januar','Februar','März','April','Mai','Juni',
'Juli','August','September','Oktober','November','Dezember');
local($time) = @_;
local($[) = 0;
local($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst);
# Determine what time zone is in effect.
# Use GMT if TZ is defined as null, local time if TZ undefined.
# There's no portable way to find the system default timezone.
$TZ = defined($ENV{'TZ'}) ? ( $ENV{'TZ'} ? $ENV{'TZ'} : 'GMT' ) : '';
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) =
($TZ eq 'GMT') ? gmtime($time) : localtime($time);
# Hack to deal with 'PST8PDT' format of TZ
# Note that this can't deal with all the esoteric forms, but it
# does recognize the most common: [:]STDoff[DST[off][,rule]
if($TZ=~/^([^:\d+\-,]{3,})([+-]?\d{1,2}:)\d{1,2}){0,2})([^\d+\-,]{3,})?/){
$TZ = $isdst ? $4 : $1;
}
$TZ .= ' ' unless $TZ eq '';
$year += ($year < 70) ? 2000 : 1900;
sprintf("%s, %2d. %s %4d (%2d:%02d:%02d Uhr) %s\n",
$DoW[$wday], $mday, $MoY[$mon], $year, $hour, $min, $sec, $TZ);
}
1;



gaestebuch.htm

<HTML>
<head><title>Unser Gästebuch</title></head>
<body>
<center>
<font color=#FF0000 size=+2>Unser Gästebuch</font><p>
<hr size=5 width = 50% align=center noshade><p>
</center>

<font size=+1>Hier finden Sie alle Eintragungen von Besuchern unseres Servers: <p>



test3.htm

<HTML>
<BODY>
<H2>Gästebuchformular</H2>
<HR>
<form method="GET" action="testform.cgi">
Geben Sie hier bitte Ihren Namen ein: <INPUT NAME="username" TYPE="TEXT" COLS=30 SIZE="30" ALIGN=left><br>
Geben Sie hier bitte Ihre eMail Adresse ein: <INPUT NAME="email" TYPE="TEXT" COLS=30 ALIGN=left><br>
<p>

Wo leben Sie?
<SELECT name="herkunft" SIZE=1 ALIGN=left>
<OPTION selected>Berlin
<OPTION>Deutschland
<OPTION>Europa
<OPTION>Asien
<OPTION>Australien
<OPTION>Amerika
<OPTION>außerhalb dieser Galaxis
</SELECT>
<p>

Was war Ihr erster Eindruck als Sie die Homepage aufgerufen haben?:<p>
<INPUT NAME="check1" TYPE="CHECKBOX"
VALUE="inhalt">
Die Seite hat viel Inhalt<BR>

<INPUT NAME="check2" TYPE="CHECKBOX"
VALUE="design">
Die Seite ist gut designt<BR>
<p>

Wie hat es ihnen insgesamt gefallen?<p>
<INPUT NAME="rating" TYPE="RADIO" ALIGN=left VALUE="Note 1">Note 1
<INPUT NAME="rating" TYPE="RADIO" ALIGN=left VALUE="Note 2">Note 2
<INPUT NAME="rating" TYPE="RADIO" ALIGN=left VALUE="Note 3">Note 3
<INPUT NAME="rating" TYPE="RADIO" ALIGN=left VALUE="Note 4">Note 4
<INPUT NAME="rating" TYPE="RADIO" ALIGN=left VALUE="Note 5">Note 5
<INPUT NAME="rating" TYPE="RADIO" ALIGN=left VALUE="Note 6">Note 6
<p>

Hier kommt der Eintrag ins GB hin<P>
<TEXTAREA NAME="comments" ROWS=8 COLS=60 ALIGN=left></TEXTAREA>
<p>

<INPUT TYPE="SUBMIT" VALUE="Senden">

</form>
</BODY>
</HTML>



testform.cgi

#!/usr/bin/perl

# testform.cgi, Gaestebuchskript (Version 0.01)
# geschrieben vom Daniel Augustin, 31.10.01

require "cgi-lib.pl";
require "datum.pl";

$date = &ctime(time);
chop($date);

print "Content-type: text/html\n\n";

print "<HTML>\n";
print "<head><title>Neueintrag in das Gästebuch</title></head>\n";
print "<body>\n";
print "<center>\n";
print "<H2>Neueintrag in das Gästebuch</H2>\n";
print "am $date<p>\n";
print "<HR>\n";
print "</center><p>\n";
print "Wir haben von Ihnen folgende Angaben erhalten:<p> \n";
print "<ul> \n";
print "<li>Ihr Name lautet: <b>$in{'username'}</b> \n";
print "<li>Ihre eMail Adresse ist: <b>$in{'email'}</b> \n";
print "<li>Sie sind ein Besucher aus: <b>$in{'herkunft'}</b> \n";
print "<li>Ihr erster Eindruck war: <b>$in{'check1'}</b> \n";
print "<li>Ihr zweiter Eindruck war: <b>$in{'check2'}</b> \n";
print "<li>Sie beurteilten unsere WWW-Seiten mit: <b>$in{'rating'}</b> \n";
print "<li>Und dann haben Sie uns auch noch folgenden Senf ins Gästebuch gekritzelt:<br> \n";
print "<b>$in{'comments'}</b> \n";
print "</ul><p> \n";
print "<B>Vielen Dank für Ihre Eintragung in unser Gästebuch!</B><p> \n";
print "</BODY>\n";
print "</HTML>\n";

$outfile = ">>gaestebuch.htm";
open(OUTFILE, $outfile);

print OUTFILE "

<hr>
Am $date kritzelte <b>$in{'username'}</b> (eMail: <a href=mailto:$in{'email'}>$in{'email'}</a>)
aus <b>\"$in{'herkunft'}\"</b> das folgende in unser Gästebuch.<p>

Als ich die Seiten sah, dachte ich: <p>
<ul>
<li>$in{'check1'}
<li>$in{'check2'}
<li>Meiner bescheidenen Meinung nach, ist diese Seite <b>\"$in{'rating'}\"</b>.
</ul>
Und hier noch mein ganz persönlicher Kommentar:<br>
\"<b>$in{'comments'}</b>\"

";

close(OUTFILE);






Bitte bitte helft mir wenn man jetzt irgendwas ins GB schreibt, kriegt man als Bestätigung ihr name ist: "" etc. obwohl die URL exakt stimmt (testform.cgi?email=bla).


Und so sieht das dann aus :( :(

Gästebuch

Schreibt mal was ins Gb und <staunt> selbst!
 
Das Problem ist meiner Meinung nach folgendes:

Du bindest zwar die Datei cgi-lib.pl mit dem require-Befehl ein, aber damit führst Du nicht die Funktionen aus, die da drin stehen.

Irgendwo vor der Ausgabe musst Du noch die Funktion parse_form aufrufen. ;)

Gruß
Dunsti
 
Hallo Big_Fish,

ändere mal:
<form method="GET" action="testform.cgi">
in
<form method="POST" action="testform.cgi">

und noch folgendes:

testform.cgi

#!/usr/bin/perl

# testform.cgi, Gaestebuchskript (Version 0.01)
# geschrieben vom Daniel Augustin, 31.10.01

require "cgi-lib.pl";
require "datum.pl";

$date = &ctime(time);
chop($date);

&parse_form();

print "Content-type: text/html\n\n";

print "<HTML>\n";
print "<head><title>Neueintrag in das Gästebuch</title></head>\n";
print "<body>\n";
print "<center>\n";
print "<H2>Neueintrag in das Gästebuch</H2>\n";
print "am $date<p>\n";
print "<HR>\n";
print "</center><p>\n";
print "Wir haben von Ihnen folgende Angaben erhalten:<p> \n";
print "<ul> \n";
print "<li>Ihr Name lautet: <b>$in{'username'}</b> \n";
print "<li>Ihre eMail Adresse ist: <b>$in{'email'}</b> \n";
print "<li>Sie sind ein Besucher aus: <b>$in{'herkunft'}</b> \n";
print "<li>Ihr erster Eindruck war: <b>$in{'check1'}</b> \n";
print "<li>Ihr zweiter Eindruck war: <b>$in{'check2'}</b> \n";
print "<li>Sie beurteilten unsere WWW-Seiten mit: <b>$in{'rating'}</b> \n";
print "<li>Und dann haben Sie uns auch noch folgenden Senf ins Gästebuch gekritzelt:<br> \n";
print "<b>$in{'comments'}</b> \n";
print "</ul><p> \n";
print "<B>Vielen Dank für Ihre Eintragung in unser Gästebuch!</B><p> \n";
print "</BODY>\n";
print "</HTML>\n";

$outfile = ">>gaestebuch.htm";
open(OUTFILE, $outfile);

print OUTFILE "

<hr>
Am $date kritzelte <b>$in{'username'}</b> (eMail: <a href=mailto:$in{'email'}>$in{'email'}</a>)
aus <b>\"$in{'herkunft'}\"</b> das folgende in unser Gästebuch.<p>

Als ich die Seiten sah, dachte ich: <p>
<ul>
<li>$in{'check1'}
<li>$in{'check2'}
<li>Meiner bescheidenen Meinung nach, ist diese Seite <b>\"$in{'rating'}\"</b>.
</ul>
Und hier noch mein ganz persönlicher Kommentar:<br>
\"<b>$in{'comments'}</b>\"

";

close(OUTFILE);
 
Zurück