Omrettelse af template-fil on-the-fly
Okay, det var måske en lidt tricky overskrift, men faktisk er det mere eller mindre det, jeg har brug for.På min hjemmeside http://www.movieboxen.dk har folk mulighed for at kommentere en film. Til dette formål har jeg en ganske simpel guestbook-script jeg har ændret til ukendelighed. Problemet med scriptet er, at den kun kan skrive til en allerede oprettet fil.
Scripet kan ses "in action" her:
http://www.movieboxen.dk/arkiv/html/0022.shtml
Trykker man på "skriv anmeldelse" eksekveres et script, der laver en formmail til guestbook-scriptet, hvorefter man kan skrive sin anmeldels og trykke send... Det er noget lettere at forstå, hvis man selv prøver at gå ind på siden.
Problemet er, at guestbook-scriptet KRÆVER at der findes en CHMOD 755'et fil med det rette navn (som er defineret tidligere via en query).
Det jeg gerne ville have, er at den først laver den fil, den skal skrive til, når folk vitterlig sender en anmeldelse afsted - ellers ligger der en frygtelig masse filer, som ikke bliver brugt til en dyt!
Den skal naturligvis kun oprette filen, hvis filen ikke findes i forvejen - ellers rygere de anmeldelser, der allerede er skrevet jo...
Håber det er til at forstå!
Scriptet ser ud som flg:
#!/usr/bin/perl
# Kommentar-script
$bookfile = "../arkiv/mening/".$ENV{'QUERY_STRING'};
# Get the input
read(STDIN, $data, $ENV{'CONTENT_LENGTH'});
# Split the name-value pairs
@pairs = split(/&/, $data);
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
# Convert the HTML encoding
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
# Convert HTML stuff as necessary.
$value =~ s/<([^>]|\n)*>//g;
$FORM{$name} = $value;
}
# Verify that the required data has been received.
&missing_name unless $FORM{'name'};
&missing_msg unless $FORM{'msg'};
&missing_overskrift unless $FORM{'anoverskrift'};
&missing_karakter unless $FORM{'karakter'};
&missing_email unless $FORM{'email'};
# Read in the book for editing
# Note: These actions on the book file should be atomic (flock()).
open (FILE, "$bookfile") || die "Can't open $bookfile: $!\n";
@LINES=<FILE>;
close(FILE);
$SIZE=@LINES;
# Open book file
open (FILE, ">$bookfile") || die "Can't open $bookfile: $!\n";
for ($i = 0; $i <= $SIZE; $i++)
{
$_=$LINES[$i];
if (/<!--top-->/)
{
print FILE "<!--top-->\n";
print FILE "<center><table width=\"450\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n";
print FILE "<tr bgcolor=\"#093F82\">\n";
print FILE "<td bgcolor=\"#093F82\" width=\"2\"><img src=\"../../grafik/spacer.gif\" width=\"2\" height=\"2\"></td>\n";
print FILE " <td colspan=7>\n";
print FILE " <div align=\"left\"><font color=\"#FFFFFF\"><b>$FORM{'anoverskrift'}</b></font></div></td>\n";
print FILE "<td bgcolor=\"#093F82\" width=\"2\"><img src=\"../../grafik/spacer.gif\" width=\"2\" height=\"2\"></td>\n";
print FILE " </tr>\n";
print FILE " <tr bgcolor=\"#A8C9F0\" >\n";
print FILE "<td bgcolor=\"#093F82\" width=\"2\"><img src=\"../../grafik/spacer.gif\" width=\"2\" height=\"2\"></td>\n";
print FILE " <td width=\"90\"><b>Skrevet af</b></td>\n";
print FILE " <td width=\"160\" bgcolor=\"#A8C9F0\">\n";
print FILE " <A HREF=\"mailto:$FORM{'email'}\"> $FORM{'name'}</A></td>\n";
print FILE " <td colspan=\"5\" bgcolor=\"#A8C9F0\" align=\"right\" height=35>\n";
if ($FORM{'karakter'} eq "5") {
print FILE " <table width=\"154\" border=\"0\" cellspacing=\"0\" cellpadding=\"2\">\n";
print FILE " <tr>\n";
print FILE " <td width=\"20\"><img src=\"http://www.movieboxen.dk/grafik/stjerneblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"20\"><img src=\"http://www.movieboxen.dk/grafik/stjerneblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"20\"><img src=\"http://www.movieboxen.dk/grafik/stjerneblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"20\"><img src=\"http://www.movieboxen.dk/grafik/stjerneblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"19\"><img src=\"http://www.movieboxen.dk/grafik/stjerneblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " </tr>\n";
print FILE " </table>\n";
}
if ($FORM{'karakter'} eq "4halv") {
print FILE " <table width=\"154\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n";
print FILE " <tr>\n";
print FILE " <td width=\"20\"><img src=\"http://www.movieboxen.dk/grafik/stjerneblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"20\"><img src=\"http://www.movieboxen.dk/grafik/stjerneblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"15\"><img src=\"http://www.movieboxen.dk/grafik/stjerneblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"17\"><img src=\"http://www.movieboxen.dk/grafik/stjerneblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"19\"><img src=\"http://www.movieboxen.dk/grafik/stjernesmallblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " </tr>\n";
print FILE " </table>\n";
}
if ($FORM{'karakter'} eq "4") {
print FILE " <table width=\"154\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n";
print FILE " <tr>\n";
print FILE " <td width=\"20\"><img src=\"http://www.movieboxen.dk/grafik/stjerneblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"20\"><img src=\"http://www.movieboxen.dk/grafik/stjerneblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"15\"><img src=\"http://www.movieboxen.dk/grafik/stjerneblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"17\"><img src=\"http://www.movieboxen.dk/grafik/stjerneblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"19\"><img src=\"http://www.movieboxen.dk/grafik/stjernenulblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " </tr>\n";
print FILE " </table>\n";
}
if ($FORM{'karakter'} eq "3halv") {
print FILE " <table width=\"154\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n";
print FILE " <tr>\n";
print FILE " <td width=\"20\"><img src=\"http://www.movieboxen.dk/grafik/stjerneblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"20\"><img src=\"http://www.movieboxen.dk/grafik/stjerneblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"15\"><img src=\"http://www.movieboxen.dk/grafik/stjerneblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"17\"><img src=\"http://www.movieboxen.dk/grafik/stjernesmallblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"19\"><img src=\"http://www.movieboxen.dk/grafik/stjernenulblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " </tr>\n";
print FILE " </table>\n";
}
if ($FORM{'karakter'} eq "3") {
print FILE " <table width=\"154\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n";
print FILE " <tr>\n";
print FILE " <td width=\"20\"><img src=\"http://www.movieboxen.dk/grafik/stjerneblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"20\"><img src=\"http://www.movieboxen.dk/grafik/stjerneblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"15\"><img src=\"http://www.movieboxen.dk/grafik/stjerneblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"17\"><img src=\"http://www.movieboxen.dk/grafik/stjernenulblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"19\"><img src=\"http://www.movieboxen.dk/grafik/stjernenulblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " </tr>\n";
print FILE " </table>\n";
}
if ($FORM{'karakter'} eq "2halv") {
print FILE " <table width=\"154\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n";
print FILE " <tr>\n";
print FILE " <td width=\"20\"><img src=\"http://www.movieboxen.dk/grafik/stjerneblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"20\"><img src=\"http://www.movieboxen.dk/grafik/stjerneblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"15\"><img src=\"http://www.movieboxen.dk/grafik/stjernesmallblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"17\"><img src=\"http://www.movieboxen.dk/grafik/stjernenulblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"19\"><img src=\"http://www.movieboxen.dk/grafik/stjernenulblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " </tr>\n";
print FILE " </table>\n";
}
if ($FORM{'karakter'} eq "2") {
print FILE " <table width=\"154\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n";
print FILE " <tr>\n";
print FILE " <td width=\"20\"><img src=\"http://www.movieboxen.dk/grafik/stjerneblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"20\"><img src=\"http://www.movieboxen.dk/grafik/stjerneblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"15\"><img src=\"http://www.movieboxen.dk/grafik/stjernenulblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"17\"><img src=\"http://www.movieboxen.dk/grafik/stjernenulblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"19\"><img src=\"http://www.movieboxen.dk/grafik/stjernenulblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " </tr>\n";
print FILE " </table>\n";
}
if ($FORM{'karakter'} eq "1halv") {
print FILE " <table width=\"154\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n";
print FILE " <tr>\n";
print FILE " <td width=\"20\"><img src=\"http://www.movieboxen.dk/grafik/stjerneblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"20\"><img src=\"http://www.movieboxen.dk/grafik/stjernesmallblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"15\"><img src=\"http://www.movieboxen.dk/grafik/stjernenulblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"17\"><img src=\"http://www.movieboxen.dk/grafik/stjernenulblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"19\"><img src=\"http://www.movieboxen.dk/grafik/stjernenulblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " </tr>\n";
print FILE " </table>\n";
}
if ($FORM{'karakter'} eq "1") {
print FILE " <table width=\"154\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n";
print FILE " <tr>\n";
print FILE " <td width=\"20\"><img src=\"http://www.movieboxen.dk/grafik/stjerneblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"20\"><img src=\"http://www.movieboxen.dk/grafik/stjernenulblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"15\"><img src=\"http://www.movieboxen.dk/grafik/stjernenulblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"17\"><img src=\"http://www.movieboxen.dk/grafik/stjernenulblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"19\"><img src=\"http://www.movieboxen.dk/grafik/stjernenulblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " </tr>\n";
print FILE " </table>\n";
}
if ($FORM{'karakter'} eq "halv") {
print FILE " <table width=\"154\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n";
print FILE " <tr>\n";
print FILE " <td width=\"20\"><img src=\"http://www.movieboxen.dk/grafik/stjernesmallblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"20\"><img src=\"http://www.movieboxen.dk/grafik/stjernenulblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"15\"><img src=\"http://www.movieboxen.dk/grafik/stjernenulblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"17\"><img src=\"http://www.movieboxen.dk/grafik/stjernenulblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " <td width=\"19\"><img src=\"http://www.movieboxen.dk/grafik/stjernenulblaa.gif\" width=\"45\" height=\"30\"></td>\n";
print FILE " </tr>\n";
print FILE " </table>\n";
}
print FILE " </td>\n";
print FILE "<td bgcolor=\"#093F82\" width=\"2\"><img src=\"../../grafik/spacer.gif\" width=\"2\" height=\"2\"></td>\n";
print FILE " </tr>\n";
print FILE " <tr bgcolor=\"#093F82\">\n";
print FILE "<td bgcolor=\"#093F82\" width=\"2\"><img src=\"../../grafik/spacer.gif\" width=\"2\" height=\"2\"></td>\n";
print FILE " <td colspan=7 width=\"10\" height=\"2\"><img src=\"../../grafik/spacer.gif\" width=\"2\" height=\"2\"></td>\n";
print FILE "<td bgcolor=\"#093F82\" width=\"2\"><img src=\"../../grafik/spacer.gif\" width=\"2\" height=\"2\"></td>\n";
print FILE " </tr>\n";
print FILE " <tr bgcolor=\"#A8C9F0\">\n";
print FILE "<td bgcolor=\"#093F82\" width=\"2\"><img src=\"../../grafik/spacer.gif\" width=\"2\" height=\"2\"></td>\n";
print FILE " <td colspan=7 height=80 valign=top>\n";
print FILE "$FORM{'msg'}";
print FILE "</td>\n";
print FILE "<td bgcolor=\"#093F82\" width=\"2\"><img src=\"../../grafik/spacer.gif\" width=\"2\" height=\"2\"></td>\n";
print FILE " </tr>\n";
print FILE " <tr bgcolor=\"#093F82\">\n";
print FILE "<td bgcolor=\"#093F82\" width=\"2\"><img src=\"../../grafik/spacer.gif\" width=\"2\" height=\"2\"></td>\n";
print FILE " <td colspan=7 width=\"10\" height=\"2\"><img src=\"../../grafik/spacer.gif\" width=\"2\" height=\"2\"></td>\n";
print FILE "<td bgcolor=\"#093F82\" width=\"2\"><img src=\"../../grafik/spacer.gif\" width=\"2\" height=\"2\"></td>\n";
print FILE " </tr>\n";
print FILE "</table></center><br><br>\n";
}
else
{
print FILE $_;
}
}
close (FILE);
# Response message.
print "Content-type: text/html\n\n";
print "<html><head><body>\n";
print "tak for indlægget!\n";
exit;
Jeg har skåret en masse html-snask væk, så det ikke virker så uoverskueligt...
