webForumDet fria alternativet

Gästbok

2 svar · 432 visningar · startad av Kent

KentMedlem sedan juli 2000359 inlägg
#1

Detta är koden till min gästbok,
vil nu ha så att var det max får vara 25 inlägg per sida, sedan ska sidorna delas upp,
Sida 1 2 3 4
typ som dom har på alxook.com.
Hur ser koden ut för detta.

#!/usr/bin/perl

$lock="2";
$unlock="8";

$forminfo=$ENV{'QUERY_STRING'}; 
$forminfo=~tr/+/ /; 
$forminfo=~s/%(..)/pack("c",hex($1))/ge; 

@par=split(/&/,$forminfo); 

foreach $a (@par){ 
($ruta, $text)=split(/=/,$a); 
$INFO{$ruta}=$text; 
} 

$INFO{'namn'}=~/[;<>\*\|´&\$!#\(\)\[\]\{\}:'"]/;
$INFO{'kommentar'}=~/[;<>\*\|´&\$!#\(\)\[\]\{\}:'"]/;
$INFO{'stad'}=~/[;<>\*\|´&\$!#\(\)\[\]\{\}:'"]/;
$INFO{'epost'}=~/^[\w-.]+\@[\w.]+$/;

if($INFO{'namn'} ne "" &#0124; &#0124; $INFO{'epost'} ne "" &#0124; &#0124; $INFO{'hemstad'} ne "" &#0124; &#0124; $INFO{'kommentar'} ne ""){
&registrera_kommentar;
}
else
{
&skriva_gastlista;
}

print "Content-type: text/html\n\n";
print "<html><head><title>Gästbok</title></head>";
print "<body bgcolor=\"#FFFFFF\" text=\"#000000\" link=\"#0000FF\" vlink=\"#0000FF\">";
print "<center><img src=$loggan></center><center><small><br>";
print "<b><br></center></small>";
print "<STYLE>A {text-decoration:none} A:hover{text-decoration:underline} </STYLE></p>";
print "<div align=\"center\"><center><table border=\"0\" width=\"400\">    <tr>";        
print "<td width=\"100%\"><p align=\"center\"></p>        </td>    </tr></table></center></div>";
print "<form action=\"gastbok.pl\" method=\"get\">";    
print "<div align=\"center\"><center><table border=\"0\" cellpadding=\"4\"    cellspacing=\"4\">"; 
print "<tr><td align=\"right\"><font color=\"#000000\">";
print "<strong>Namn:</strong></font></td>";
print "<td><input type=\"text\" size=\"30\" maxlength=\"40\" name=\"namn\"></td>";
print "</tr><tr><td align=\"right\"><p align=\"right\"><font color=\"#000000\"><strong>E-post: </strong></font></p>";
print "</td><td><input type=\"text\" size=\"30\" maxlength=\"40\" name=\"epost\"></td>";
print "</tr><tr><td align=\"right\"><p align=\"right\"><font color=\"#000000\"><strong>Hemstad: </strong></font></p>";
print "</td><td><input type=\"text\" size=\"30\" maxlength=\"40\"  name=\"hemstad\"></td></tr><tr><td align=\"right\" valign=\"top\">";
print "<p align=\"center\"><font color=\"#000000\"><strong>Kommentar:</strong></font></p></td><td valign=\"top\"><p align=\"right\">";
print "<textarea name=\"kommentar\" rows=\"4\" cols=\"30\" maxlength=\"100\"></textarea><br>";
print "<input type=\"submit\" value=\"Sänd\"> <input type=\"reset\" value=\"Rensa\"></p></td></tr><tr><td>";
print "</td></tr></table></center></div></form>";
print "</body></html>";

sub skriva_gastlista{
$k=0;
flock(TEXT,$lock);
open (TEXT,"$boktext");
while ($rad=<TEXT> ){
$k++;
$rad=~/(.*)::(.*)::(.*)::(.*)::(.*)::(.*)::(.*)::(.*)/;

$INFO1[$k]=$1;
$INFO2[$k]=$2;
$INFO3[$k]=$3;
$INFO4[$k]=$4;
$INFO5[$k]=$5;
$INFO6[$k]=$6;
$INFO7[$k]=$7;
$INFO8[$k]=$8;
}
close (TEXT);
flock(TEXT,$unlock);
}

flock(TEXT,$lock);
open (TEXT,"$boktext");
$kommentarer=0;
@filen=<TEXT>;
foreach $rad (@filen){
$kommentarer++;
}
close (TEXT);
flock(TEXT,$unlock);

$nr=0;
while ($k ne 0){

$SORT1[$nr]=$INFO1[$k];
$SORT2[$nr]=$INFO2[$k];
$SORT3[$nr]=$INFO3[$k];
$SORT4[$nr]=$INFO4[$k];
$SORT5[$nr]=$INFO5[$k];
$SORT6[$nr]=$INFO6[$k];
$SORT7[$nr]=$INFO7[$k];
$SORT8[$nr]=$INFO8[$k];
$nr++;
$k--;
}

print "<center><table border=\"0\" width=\"400\"><TR><TD>";
$nr=0;
while ($nr ne 25){

if($nr eq $kommentarer){
&raknare;
exit;
}
print "<hr>";
		if($SORT3[$nr] ne "tomt") 
		
{ 
                print  "<b><a href=\"mailto:$SORT3[$nr]\">$SORT2[$nr]</A></b> <small><i>  ($SORT7[$nr])</i> <br>\n";
	} 
            	  else
		{
               print  "<b>$SORT2[$nr]</b> <small><i>($SORT7[$nr])</i><br>\n";
		}

		print  "$SORT5[$nr]</b><p>\n";

		if($SORT4[$nr] ne "") 
		{ 
		print  "$SORT4[$nr], $SORT8[$nr] - $SORT1[$nr]</small><br>";
		} 
             	  else
	{
                print  "$SORT8[$nr] - $SORT1[$nr]</small><br>";
	}
     
    
$nr++;
if($nr eq 10){
&raknare;
print "</TD></TR></TABLE>";
exit;
}

}

sub raknare{

flock(RAKNARE,$lock);
open (RAKNARE,"$boknr");
while ($rad=<RAKNARE> ){
$rad=~/(.*)::(.*)/;
$besokare[1]=$1;
$kommentar[1]=$2;
}
close (RAKNARE);
flock(RAKNARE,$unlock);

$besokare[1]++;

flock(RAKNARE,$lock);
open (RAKNARE,">$boknr");
print RAKNARE "$besokare[1]::$kommentar[1]";
close (RAKNARE);
flock(RAKNARE,$unlock);

print "<hr><p><small><center>Du är besökare nr: <b>$besokare[1]</b> på denna sida!";
print "<STYLE>A {text-decoration:none} A:hover{text-decoration:underline} </STYLE>";
print "</TD></TR></TABLE>";
exit;
}

sub registrera_kommentar{

if($INFO{'namn'} eq "" &#0124; &#0124;$INFO{'kommentar'} eq "") 
{ 
print "Content-type: text/html\n\n"; 
print "<body bgcolor=\"white\" text=\"black\">";
print "<p><left><b><h3>";
print "Namn och kommentar är obligatoriska uppgifter!<br>"; 
print "Backa med din browser och fyll i glömd uppgift!"; 
print "</left></h3></b>";
exit; 
} 

if($INFO{'epost'}=~/[;<>\*\`&\$!#\(\)\[\]\{\}:'"]/) 
{ 
print "Content-type: text/html\n\n"; 
print "<body bgcolor=\"white\" text=\"black\">";
print "<p><left><b><h3>";
print "Din epost innehåller ett felaktigt tecken!<br>"; 
print "Backa med din browser och korrigera uppgiften!"; 
print "</left></h3></b>";
exit; 
} 

if($INFO{'epost'} eq "")
{
$INFO{'epost'}="tomt";
}

print "Content-type: text/html\n\n"; 
print "<meta http-equiv=\"Refresh\" content=\"2; URL=$gastbok\">";
print "<body bgcolor=\"white\" text=\"black\">";
print "<p><left><b><h3>";
print "Tack för din kommentar, $INFO{'namn'}!<br>"; 
print "Du kommer inom kort att förflyttas till gästboken.<br>Om ditt inlägg inte syns, så uppdatera sidan."; 
print "</left></h3></b>";

$INFO{'namn'} =~ s/</\&lt\;/g;
$INFO{'namn'} =~ s/</\&gt\;/g;
$INFO{'hemstad'} =~ s/</\&lt\;/g;
$INFO{'hemstad'} =~ s/</\&gt\;/g;
$INFO{'kommentar'} =~ s/</\&lt\;/g;
$INFO{'kommentar'} =~ s/</\&gt\;/g;

$INFO{'kommentar'}=~s/\n/<br>/g; 

@dagar = ("Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag");
@manader = ("Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December");

@tid = localtime(time);

if ($tid[3] > 2){
$tid[3] = $tid[3].":e";
}else{
$tid[3] = $tid[3].":a";
}

if ($tid[0] < 10){
$tid[0] = "0".$tid[0];
}

if ($tid[1] < 10){
$tid[1] = "0".$tid[1];
}

if ($tid[2] < 10){
$tid[1] = "0".$tid[1];
}

$tid[5]=$tid[5]+1900;

$datum=  "$dagar[$tid[6]]en den $tid[3] $manader[$tid[4]] $tid[5]";

flock(FILE,$lock);
open(FILE,"$ord");
@censur=<FILE>;
close FILE;
flock(FILE,$unlock);

map {
chomp;
$replace = '*' x length($_);
$INFO{'namn'} =~ s/$_/$replace/gi;
$INFO{'epost'} =~ s/$_/$replace/gi;
$INFO{'namn'} =~ s/$_/$replace/gi;
$INFO{'hemstad'} =~ s/$_/$replace/gi;
$INFO{'kommentar'} =~ s/$_/$replace/gi;
}
@censur;

@kontroll = ('::');                                         
map { 
$replace = '*' x length($_); # Här är det du söker.
$INFO{'namn'} =~ s/$_/$replace/gi;
$INFO{'epost'} =~ s/$_/$replace/gi;
$INFO{'namn'} =~ s/$_/$replace/gi;
$INFO{'hemstad'} =~ s/$_/$replace/gi;
$INFO{'kommentar'} =~ s/$_/$replace/gi;
}
@kontroll;

flock(RAKNARE,$lock);
open (RAKNARE,"$boknr");
while ($rad=<RAKNARE> ){
$rad=~/(.*)::(.*)/;
$besokare[1]=$1;
$kommentar[1]=$2;

}
close (RAKNARE);
flock(RAKNARE,$unlock);

$kommentar[1]++;

flock(RAKNARE,$lock);
open (RAKNARE,">$boknr");
print RAKNARE "$besokare[1]::$kommentar[1]";
close (RAKNARE);
flock(RAKNARE,$unlock);

flock(LOGG,$lock);
open (LOGG,">>$boktext");

print LOGG "$kommentar[1]::$INFO{'namn'}::$INFO{'epost'}::$INFO{'hemstad'}::$INFO{'kommentar'}::$INFO{'R1'}::$ENV{'REMOTE_ADDR'}::$datum\n";

close (LOGG);

flock(LOGG,$unlock);
exit;
}

Mycket tacksam för svar.

demo
#2

Hej Kent!

Det där scriptet har du väl laddat ned från wF-script :)

Kul att scriptet kom till användning. :)

Vad gäller din fråga, så ställdes en liknande fråga tidigare och jag länkar till den och hoppas att den är dig till hjälp.

Länk till tidigare inlägg: http://cgi.webforum.nu/wf/Forum14/HTML/000156.html

Nu är jag en nybörjare/amatör vad gäller Perl, så det skulle vara intressant och höra vad de mer erfarna perl-programmerarna tycker om koden?

För att få ihop gästboken så ställde jag en del frågor på wf.
Så delar av scriptet bla. censurhanteringen kommer från svarsinlägg i wF.

Men för en perl-amatör vore det kul med lite synpunkter på koden. Vad kan man göra bättre och effektivare m.m.

//Demo

[Redigerat av demo den 19 aug 2000]

KentMedlem sedan juli 2000359 inlägg
#3

Fattar inte riktigt, går det att göra med följande kod:
use POSIX qw(ceil);
$antalsidor=ceil($antalinlagg/$antalpersida);

Genererad på 384 ms · cache AV · v20260730165559-full.f96bc7eb