webForumDet fria alternativet

Perl typ gästbok

4 svar · 494 visningar · startad av Rödalacket

RödalacketMedlem sedan feb. 20002 612 inlägg
#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)

FlashXMedlem 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.

RödalacketMedlem 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

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

FlashXMedlem 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.

RödalacketMedlem 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

129 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)