OK men hur ändrar man denna kod så den delas upp på detta vis,
<a href="gb.cgi?page=1">1|
<a href="gb.cgi?page=2">2|
osv...
som det ser ut nu så stegar man sig fram med pilar,
här kommer koden för andra som kanske har något förslag på kod:
#!/usr/bin/perl
# Variabler
$path = get_scriptdir(); # Se readme.txt
$datafile = 'jxbookpro2.dat'; # Namnet på datafilen för gästboken.
$template = 'jxbookpro2tmpl.html'; # Templatefilen för gästboken.
$msgtemplate = 'jxbookpro2entry.html'; # Templatefilen för varje meddelande.
$messagesperpage = 10; # Meddelanden per sida.
$encodehtml = '1'; # Se readme.txt
# Ändra inte på följande rader.
%form = get_form();
%query = get_query();
$numberofentries = get_nrgbentries();
$startmessage = max(1,$numberofentries-$messagesperpage+1);
$startmessage = $query{'startmessage'} if($query{'startmessage'});
# Lite macron att leka med.
$macro{'nextpageurl'} = $ENV{'SCRIPT_NAME'} . "?startmessage=" . min($startmessage+$messagesperpage,max($numberofentries-$messagesperpage+1,1));
$macro{'prevpageurl'} = $ENV{'SCRIPT_NAME'} . "?startmessage=" . max($startmessage-$messagesperpage,1);
$macro{'lastpageurl'} = $ENV{'SCRIPT_NAME'} . "?startmessage=" . max($numberofentries-$messagesperpage+1,1);
$macro{'firstpageurl'} = $ENV{'SCRIPT_NAME'} . "?startmessage=1";
$macro{'nrmessages'} = $numberofentries;
# Vilka fält skall användas, och i vilken ordning.
open(INDATA,"$path/$datafile") || error('Kunde inte hitta/läsa datafilen <i>' . "$path/$datafile" . '</i>.');
foreach $inline (<INDATA> ){
last if($inline =~ /#--data--/);
if (substr($inline,0,1) ne '#' && index($inline,'=')>0){
chomp $inline;
($name,$value) = split(/=/,$inline);
$config{$name} = $value;
}
}
close(INDATA);
error('Datafilen innehåller inte någon information om <i>fält</i> (fields).') if(!$config{'fields'});
@usefields = split(/,/,$config{'fields'});
# Kolla så att templatefilen för gästboken går att läsa.
open(INDATA,"$path/$template") || error('Kunde inte hitta/läsa templatefilen för gästboken <i>' . "$path/$template" . '</i>.');
close(INDATA);
# Läs in templatefilen för meddelanden.
open(INDATA,"$path/$msgtemplate") || error('Kunde inte hitta/läsa templatefilen för meddelanden <i>' . "$path/$msgtemplate" . '</i>.');
$msgtemplate = join('',<INDATA> );
close(INDATA);
@msgmacros = ($msgtemplate =~ /%%(.*?)%%/g);
# Är det ett meddelande som skall skrivas in?
addtobook() if ($form{'action'} eq 'addtobook');
@gbentries = get_gbentries($startmessage,$messagesperpage);
@gbentries = reverse(@gbentries);
foreach $test (@gbentries){
@theseentries = split(/\t/,$test);
$thismsgmacro{'ip'} = pop(@theseentries);
$thismsgmacro{'time'} = pop(@theseentries);
$thismsgmacro{'date'} = pop(@theseentries);
for($n=0;$n<=$#usefields;$n++){
$thismsgmacro{$usefields[$n]} = $theseentries[$n];
}
$thismsg = $msgtemplate;
foreach $msgmacro (@msgmacros){
$thismsg =~ s/%%$msgmacro%%/$thismsgmacro{$msgmacro}/g;
}
$macro{'gbentries'} .= $thismsg . "\n";
}
print "Content-type: text/html\n\n";
open(INDATA,"$path/$template");
foreach $inline (<INDATA> ){
@testmacros = ($inline =~ /%%(.*?)%%/g);
foreach $testmacro (@testmacros){
$inline =~ s/%%$testmacro%%/$macro{$testmacro}/g;
}
print $inline;
}
close(INDATA);
sub get_form {
my $buffer,$n;
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
my @pairs = split(/&|=/, $buffer);
for($n=0;$n<=$#pairs;$n++){
$pairs[$n] =~ tr/+/ /;
$pairs[$n] =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$pairs[$n] =~ s/<!--(.|\n)*-->//g;
$pairs[$n] =~ s/<([^>]|\n)*>//g;
}
return @pairs;
}
sub get_query {
my $query_buffer = $ENV{'QUERY_STRING'};
my @pairs = split(/&|=/, $query_buffer);
for($n=0;$n<=$#pairs;$n++){
$pairs[$n] =~ tr/+/ /;
$pairs[$n] =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$pairs[$n] =~ s/<!--(.|\n)*-->//g;
$pairs[$n] =~ s/<([^>]|\n)*>//g;
}
return @pairs;
}
sub get_scriptdir {
my $path = $ENV{'PATH_TRANSLATED'};
$path =~ s/\\/\//g;
return substr($path,0,rindex($path,'/'));
}
sub error {
print "Content-type: text/html\n\n";
print <<End_of_html;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Fel!</title>
</head>
<body bgcolor="white">
<h2>Fel!</h2>
<p>$_[0]
</body>
</html>
End_of_html
exit;
}
sub addtobook {
my $missing,$test,$temp;
if($form{'required'}){
$form{'required'} =~ s/ //g;
@required = split(/,/,$form{'required'});
foreach $test (@required){
$missing .= "<li> $test <br>\n" if(!$form{$test});
}
if($missing){
print "Content-type: text/html\n\n";
print <<End_of_html;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Fält saknas!</title>
</head>
<body bgcolor="white">
<h2>Du måste fylla i följande fält</h2>
<ul>
$missing
</ul>
<a href="#" onClick="history.go(-1);">Tillbaks</a>
</body>
</html>
End_of_html
exit;
}
}
open(OUTDATA,">>$path/$datafile") || error('Kunde inte skriva till datafilen <i>' . "$path/$datafile" . '</i>. Fel rättigheter satta på filen?');
foreach $test (@usefields){
$temp = $form{$test};
$temp =~ s/\\/\\\\/g;
$maclf = chr(13);
$unixlf = chr(10);
if(index($temp,$unixlf)>-1 && index($temp,$maclf)>-1){
$temp =~ s/$maclf//g;
}
$temp =~ s/$unixlf/\\n/g;
$temp =~ s/$maclf/\\n/g;
print OUTDATA $temp . "\t";
}
print OUTDATA jxtodaysdate() . "\t" . jxtimenow() . "\t" . $ENV{'REMOTE_ADDR'} . "\n";
close(OUTDATA);
}
sub get_gbentries {
# get_gbentries(startmessage,messagesperpage)
my $inline,$doread=0,$n=0;
my @data;
open(INDATA,"$path/$datafile") || error('Kunde inte hitta/läsa datafilen <i>' . "$path/$datafile" . '</i>.');
foreach $inline (<INDATA> ){
chomp $inline;
$doread = 1 if($inline =~ /#--data--/);
next if($doread eq 0);
next if(substr($inline,0,1) eq '#');
$n++;
if($n>=$_[0]){
$inline =~ s/\\\\/\\/g;
if($encodehtml eq '1'){
$inline =~ s/</</g;
$inline =~ s/>/>/g;
$inline =~ s/\\n/<br>/g;
} else {
$inline =~ s/\\n/\n/g;
}
push(@data,$inline);
}
last if($n eq $_[0] + $_[1]-1);
}
close(INDATA);
return @data;
}
sub get_nrgbentries(){
my $inline,$doread=0,$n=0;
open(INDATA,"$path/$datafile") || error('Kunde inte hitta/läsa datafilen <i>' . "$path/$datafile" . '</i>.');
my @inlines = <INDATA>;
close(INDATA);
foreach $inline (@inlines){
$doread = 1 if($inline =~ /#--data--/);
next if($doread eq 0);
$n++ if(index($inline,"\t")>-1);
}
return $n;
}
sub max {
if($_[0] > $_[1]){
return $_[0];
} else {
return $_[1];
}
}
sub min {
if($_[0] < $_[1]){
return $_[0];
} else {
return $_[1];
}
}
sub jxtodaysdate {
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900;
$mon++;
$mon = substr("0" . $mon,length($mon)-1,length($mon)+1);
$mday = substr("0" . $mday,length($mday)-1,length($mday)+1);
return($year . "-" . $mon . "-" . $mday);
}
sub jxtimenow {
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$hour = substr("0" . $hour,length($hour)-1,length($hour)+1);
$min = substr("0" . $min,length($min)-1,length($min)+1);
$sec = substr("0" . $sec,length($sec)-1,length($sec)+1);
return($hour . ":" . $min . ":" . $sec);
}