webForumDet fria alternativet

Perl typ gästbok

Programmering

4 svar · 495 visningar · startad av Rödalacket

Medlem sedan feb. 20002 612 inlägg
Frågan#1

Hejsan...
Jag har ett litet problem...
Jag vill att en inmatning som görs på en sida
skall skrivas till en html sida så att det ser ut ungefär som en gästbok.
Jag har tittat i en gästbok hur det ser ut men har inte fått det att funka.
Det är bara två variabler som skall skrivas dit och dom heter $FORM{'betyg'} och $FORM{'namn'}.
Finns det hjälp att få kanske :o)

Medlem sedan nov. 19991 033 inlägg
#2

Kan du dela med dig av inläsningdelen av koden för gästboken som du tittat på (eller länk till skriptet) så blir det enklare att se var felet ligger.

Medlem sedan feb. 20002 612 inlägg
#3

Japp det kan jag.#!/usr/bin/perl
print "Content-type:text/html\n\n";

$gb_file = "../guestbook.htm";
$gb_url = "../guestbook.htm";

&read_form;
&add_entry;
print "Location: $gb_url\n\n";

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@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;
$FORM{$name} = $value;
}

%namn = ( 0 => "",
1 => "Peter",
2 => "Petter",
3 => "Agda",
4 => "Kalle",
5 => "Kålle",
6 => "Åsa" );

print <<EndHTML;
<html><head><title>Resultat</title></head>
<body>

Lagkamrat $namn{$FORM{'namn'}} kommer $FORM{'status'} på Söndag<p>

sub add_entry {
open(MAIN,"$gb_file") | | &fatal("Kan inte öppna filen $gb_file för läsning.<br>Se readme.txt.");
@main = <MAIN>;
close(MAIN);
open(MAIN,">$gb_file") | | &fatal("Kan inte skriva till filen $gb_file.<br>Se readme.txt.");
foreach $main_line (@main) {
if ($main_line =~ /<!--begin-->/) {
print MAIN "<!--begin-->\n";
print MAIN "<table border=0 width='400'>\n";
print MAIN "<tr><td width='20%'><b>Namn:</b></td><td><i><a href=\"mailto:$FORM{'namn'}\">$FORM{'status'}</a></i></td></tr>\n";
print MAIN "</table>\n";
print MAIN "<hr width='400'><br>\n";
} else {
print MAIN "$main_line";
}
}
close(MAIN);
}

EndHTML

Här vill jag alltså att det som skrivs skall fyllas på efter <--begin--> i guestbook.htm

------------------

Medlem sedan nov. 19991 033 inlägg
#4

Är lite osäker på hur du menar men skulle det här fungera?

I så fall kan du använda koden:

#!/usr/bin/perl

$ResultURL = "http://din_doman.se/resultat.html";
$ResultHomeDir = "/home/din_katalog/public_html/resultat.html";

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@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;
	$value =~ s/<!--(.|\n)*-->//g;
	$value =~ s/</\<\;/g;
	$value =~ s/>/\<\;/g;

   $FORM{$name} = $value;
}

open (FILE,"$ResultHomeDir") | | die "Kan inte öppna $ResultHomeDir: $!\n";
@LINES=<FILE>;
close(FILE);
$SIZE=@LINES;

open (RESULT,">$ResultHomeDir") | | die "Kan inte öppna $ResultHomeDir: $!\n";

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

	print RESULT "<!--begin-->\n";
	print RESULT "<table border=\"0\" cellspacing=\"0\" cellpadding=\"4\" align=\"center\" width=\"400\"><tr><td align=\"right\" width=\"200\">$FORM{'namn'}</td>\n";
	print RESULT "<td width=\"200\">$FORM{'betyg'}</td></tr></table>\n";
	}
	else {
	      print RESULT $_;
	   }
}

close (RESULT);

print "Location: $ResultURL\n\n";

exit;

och koden till formuläret ser du ju på sidan.
Tabellen som skrivs ut av skriptet klarar du säkert att modifiera själv.

Observera att | | i skriptet får ett mellanslag när det publiceras på forumet, så glöm inte att ta bort det.

Medlem sedan feb. 20002 612 inlägg
#5

Ja det där funkar med lite modifieringar :)
Jag fick mitt script att funka men jag fick inte med rullnings listen....varför vet jag inte...
Tack

251 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)