14. maj 2001 - 17:56
Der er
3 kommentarer og
1 løsning
Indsamling af informationer ..
Jeg skal lave et spørgesmema, og ville gerne have alle de indsamlede informationer ned i en txtfil på serveren.. ville helst at informationerne kunne indskrives på en htmlside via forms... hvordan kan dette gøres?
Mvh
Computopic
Du laver blot en helt alm. html-side med en form der rummer alle de indtastningsfelter folk skal taste ind.
Du erklærer en <form> hvor action er sat til at pege på dit cgi-program. Eksempel:
<form action=\'/cgi-bin/dataindsamling.cgi\' method=post>
...hvis dit script vel at mærke hedder dataindsamling.cgi og ligger i dit cgi-bin
Dit perl-program kunne så eksempelvis se således ud:
#!/usr/bin/perl
use strict; # Kun hvis du plejer at bruge strict. Den kan fjernes.
###################### main #####################
print \"Content-type: text/html\\n\\n\";
my %form;
%form = &hentCgi();
&skrivTilFil(\"data.txt\");
print \"<html><head><title>Tak for dit input</title></head><body>\\n\";
print \"Mange tak for dit input. Dit indlæg er registreret\\n\";
print \"</body></html>\\n\";
################## SUB RUTINER ###################
# hent cgi parametre
sub hentCgi {
my $buffer;
if ( $ENV = $ENV{\"REQUEST_METHOD\"} =~ m/GET/i ) {
$buffer = $ENV{\"QUERY_STRING\"};
}
elsif ( $ENV{\"REQUEST_METHOD\"} =~ m/POST/i ) {
read ( STDIN, $buffer, $ENV{\"CONTENT_LENGTH\"} );
}
my @pairs = split(/&/, $buffer);
my %cgiform;
foreach (@pairs) {
$_ =~ tr/+/ /;
$_ =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(\"C\", hex($1))/eg;
# $_ =~ s/([;<>\\*\\|\\`&\\$!\\#\\(\\)\\[\\]\\{\\}:\\\'\\\"])/\\\\$1/g;
my ($name, $value) = split(/=/, $_, 2);
$cgiform{$name} = $value;
}
return %cgiform;
}#hentCgi
#################################
# Skriver til den parameterangivne fil
sub skrivTilFil {
open FIL \">>$_[0]\" || &fejlMeddelelse(\"Skrivefejl\",\"Kunne ikke åbne datafilen $_[0]\");
# Her skriver du alle dine ønskede parametre ned i filen.
# Her er et par eksempel-linier.
print FIL $form{\'navn\'} . \"\\n\";
print FIL $form{\'gadenavn\'} . \" \" . $form{\'husnr\'} . \"\\n\";
print FIL $form{\'parameter3\'} . \"\\n\";
print FIL $form{\'parameter4\'} . \"\\n\";
close (FIL);
}
#####################################
# Udskriver en fejlmeddelelse, og lukker programmet.
sub fejlMeddelelse {
print \"<html><head><title>Fejl</title></head><body>\\n\";
print \"<h1>$_[0]</h1>\\n\";
print \"$_[1]\\n\";
print \"</body></html>\\n\";
exit(0);
}
Det burde gøre det. Jeg har ikke lige syntaks-checket det her, da jeg ikke har mulighed for at køre perl på denne maskine. :-)
Du må jo skrive hvis der er problemer.