Jag vet att jag ställt denna fråga förut, men då jag inte fick något riktigt svar ställer jag den igen,
hur gör man för att dela upp sidan på flera recordset var 50 inlägg.
SIDA |1|2|3..
<a href="gb.cgi?page=1">1|
<a href="gb.cgi?page=2">2|...
allt ska givetvis ske automatiskt.
Det du frågar efter är egentligen ett helt script, eftersom det beror på hur resten av ditt script ser ut. Jag har en gästbok som fungerar på det sättet. Du får gärna titta på koden och tala om hurvida du förstår dokumentationen.
http://www.jojoxx.net/perl/archive/jxbookpro20.zip
------------------
/ J
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);
}
vBulletin® v3.8.6, Copyright ©2000-2013, Jelsoft Enterprises Ltd.