webForumDet fria alternativet

Sidräknare

11 svar · 605 visningar · startad av stevenet

stevenetMedlem sedan juni 20001 251 inlägg
#1

Hej,

Jag behöver en siduträknare. $antal står för antalet meddelanden i gästboken. Det är 11 meddelanden på varje sida, alltså 0-10 11-21 22-32 osv. Hur ska jag räkna ut hur många sidor det finns i gästboken, om det finns exempelvis 273 meddelanden? Detta ska räknas ut utan att jag
behöver skriva upp en lång if-sats som tex:

$antalsidor = 1;

if ($antal > 10) {
$antalsidor++;
}
if ($antal > 21) {
$antalsidor++;
}
if ($antal > 32) {
$antalsidor++;
}
if ($antal > 43) {
$antalsidor++;
}
if ($antal > 54) {
$antalsidor++;
}
if ($antal > 65) {
$antalsidor++;
}
if ($antal > 76) {
$antalsidor++;
}
if ($antal > 87) {
$antalsidor++;
}
if ($antal > 98) {
$antalsidor++;
}

------------------
/SteveNet - I think, therefore I am.

[Redigerat av stevenet den 02 jul 2000]

sgtpepperMedlem sedan apr. 20007 588 inlägg
#2

Ehhh...

Testa att dividera $antal med 10...

Förresten. Om du har 10 inlägg per sida så blir det ju 0-9, 10-19, 20-29 osv och inte 0-10, 11-21 osv (det blir 11 per sida).

Om du har 273 inlägg, dividerat med 10 så får du 27.3, avrunda uppåt, voila: 28 sidor.

;)

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

1010011010 - The binary number of the beast

[Redigerat av sgtpepper den 02 jul 2000]

stevenetMedlem sedan juni 20001 251 inlägg
#3

Hur avrundar jag uppåt/nedåt i cgi?

------------------
/SteveNet - I think, therefore I am.

[Redigerat av stevenet den 02 jul 2000]

demo
#4

Hej!

Plocakde ut en subrutin ur min egen gästbok som jag gjort, och som innehåller din efterfrågade funktion.

Den räknar antalet inlägg och delar dessa med 10, eftersom du vill omfatta 10 inlägg på varje sida, 1-10, 11-20 osv.

Har du 98 inlägg så skall du ha en while-sats som snurrar, i detta fall (98/10=9,8) 10 varv. I varje var skriver den då ut en länk till inlägg 1-10, 11-20 och avsluta med 90-98.

I mitt exempel nedan har jag först en länk som länkar till själva gästboksidan, därefter kommer länkar till övriga inlägg, och avslutningsvis en länk till gästbokens säksida.

Resultatet av nedasntående exempelkod kan du se på bilden. http://hem.passagen.se/mfalkman/Image5.gif

Som vanligt bör meddelas att detta är en hobbykonstruktion och bättre lösningar finns nog att tillgå, men hoppas att du har någon hjälp av koden.

sub lasainlagg{
########################################
# Skriver ut länkar till övriga inlägg #
########################################
$summa=$kommentarer/10;
$varv=0;

print "<table width=\"400\"><tr><td><center><small><b>[ </b>";
while ($varv < $summa){

$varv++;
$total=$varv*10;
$fran=$total-9;

if ($varv==1){
print " <a href=\"http://localhost/cgi-bin/bok.pl\\">Startsida </A>| ";
}
else
{
print "<a href=\"http://localhost/cgi-bin/bok.pl?lasa=$total\\"> $fran-$total </A>| ";
}
}
print "<a href=\"$sokning\">Söksida/samtliga</A><b> ] </b></small></center></td></tr></table>";
}

[Redigerat av demo den 03 jul 2000]

[Redigerat av demo den 03 jul 2000]

stevenetMedlem sedan juni 20001 251 inlägg
#5

Nja, det var inte det jag var ute efter.

Ställer frågan igen:
Hur avrundar jag nedåt i cgi?
Om exempelvis koden ser ut så här:

$antalpersida = 10;
$antalinlagg = 198;
$antalsidor = $antalinlagg/$antalpersida;

$antalsidor blir då 19,8. Detta vill jag ska avrundas nedåt till 19. Hur?

------------------
SteveNet - I think, therefore I am.

JojoxxMedlem sedan juni 20004 308 inlägg
#6

int() kan du använda för att plocka ut heltalsdelen. Obs att det inte är samma sak som att avrunda eftersom den inte tar någon hänsyn till ev. decimaler, men det är ju så du vill ha det.

$antalpersida = 10;
$antalinlagg = 198;
$antalsidor = int($antalinlagg/$antalpersida);

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

/ J

stevenetMedlem sedan juni 20001 251 inlägg
#7

Tack, det var det jag var ute efter!

------------------
SteveNet - I think, therefore I am.

sgtpepperMedlem sedan apr. 20007 588 inlägg
#8

Men du borde avrunda uppåt, om talet blir 19.3 sidor så finns det ju egentligen 20 "fysiska" sidor.

Du kan ju lägga till 1 på talet innan du kör int:

antalsidor = int(($antalinlagg/$antalpersida) + 1);

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

1010011010 - The binary number of the beast

[Redigerat av sgtpepper den 03 jul 2000]

stevenetMedlem sedan juni 20001 251 inlägg
#9

Men om $antalsidor är 19.0, är det dumt att lägga till 1 eller hur?
Tack ändå!

------------------
SteveNet - I think, therefore I am.

[Redigerat av stevenet den 03 jul 2000]

emissionMedlem sedan dec. 19996 721 inlägg
#10

use POSIX qw(ceil);

$antalsidor=ceil($antalinlagg/$antalpersida);

KentMedlem sedan juli 2000355 inlägg
#11

Demo din kod funkar inte, är det verkligen en full fungerande kod som dela upp meddelanden på olika sidor.

demo
#12

Har lagt upp en liten exprimentgästbok som jag använder under arbetets gång.
http://www.webstugan.pp.nu/cgi-bin/testbok/bok.pl

I själva gästboken har jag lagt in nedanstående kod som skapar länkarna som är nederst på gästbokens förstasida.

sub lankar{
########################################
# Skriver ut länkar till övriga inlägg #
########################################

### Räknar antalet inlägg
open (TEXT,"$boktext");
$kommentarer=0;
@filen=<TEXT>;
foreach $rad (@filen){
$kommentarer++;
}
close (TEXT);

$summa=$kommentarer/10;
$varv=0;

print "<table width=\"400\" align=center><tr><td>";
print "<p><center><small><b>[ </b>";
print "<STYLE>A {text-decoration:none} A:hover{text-decoration:underline} </STYLE>";
while ($varv < $summa){

$varv++;
$total=$varv*10;
$fran=$total-9;

if ($varv==1){
print " <a href=\"$gastbok\">Gästbok</A> &#0124; ";
}
else
{

#### Den sida som man befinner sig på skall ha fet text bland länkarna
if ($INFO{'lasa'}==$fran){
print "<b> <a href=\"$links?lasa=$fran\"> $fran-$total</A> </b>&#0124; ";
}
else
{
print " <a href=\"$links?lasa=$fran\"> $fran-$total</A> &#0124; ";
}

##### Söksidan skrivs ut
}
}
print " <a href=\"$sokning\">Söksida</A><b> ] </b></small></center></td></tr></table><p>";
}

Koden skapar först en länk till själva gästboken. Därefter räknar den antalet inlägg, delar resultatet med 10, och gör en länk för varje påbörjat 10-tal.

Varje länk hänvisar därefter till en nytt script. I länken följer det med ett värde så att scriptet vet vilka inlägg som skall visas.

Länken hänvisar sedan till detta script.

################################################
###### Tar emot uppgifter från formuläret ######
################################################
$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; 
} 

&lankar;
&skriva_gastlista;

sub lankar{
########################################
# Skriver ut länkar till övriga inlägg #
########################################

### Räknar antalet inlägg
open (TEXT,"$boktext");
$kommentarer=0;
@filen=<TEXT>;
foreach $rad (@filen){
$kommentarer++;
}
close (TEXT);

$summa=$kommentarer/10;
$varv=0;

print "Content-type: text/html\n\n";
print "<table width=\"400\" align=center><tr><td>";
print "<center><h2><b>Äldre inlägg ur exprimentgästboken!</h2></b></center>";
print "<center><small><b>[ </b>";
print "<STYLE>A {text-decoration:none} A:hover{text-decoration:underline} </STYLE>";
while ($varv < $summa){

$varv++;
$total=$varv*10;
$fran=$total-9;

if ($varv==1){
print " <a href=\"$gastbok\">Gästbok</A> &#0124; ";
}
else
{

#### Den sida som man befinner sig på skall ha fet text bland länkarna
if ($INFO{'lasa'}==$fran){
print "<b> <a href=\"$lankar?lasa=$fran\"> $fran-$total</A> </b>&#0124; ";
}
else
{
print " <a href=\"$lankar?lasa=$fran\"> $fran-$total</A> &#0124; ";
}

##### Söksidan skrivs ut
}
}
print " <a href=\"$sokning\">Söksida</A><b> ] </b></small></center></td></tr></table>";
print "</td></tr></table>";
}

###############################
###### Skriver ut inläggen ####
###############################
sub skriva_gastlista{
$k=0;
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);
}

#### Vänder på vektorn så att vekt(1) blir det senaste inlägget 
$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--;
}

#####################################
###### Skriver ut de 10 inläggen ####
#####################################
print "<center><table border=\"0\" width=\"400\"><TR><TD><hr>";
$nr=$INFO{'lasa'};
$snurr=1;
while ($snurr ne 11){

if($nr == $kommentarer) 	
{ 
print "</td></tr></table>";
exit;
} 

print "<img src=\"$bilder/$SORT6[$nr]\" alt=\"$alternativtext\"> ";

		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>";
	}
         
print "<hr>";
$snurr++;
$nr++;
}
print "</td></tr></table>";
print "<br>";

Ovanstående kodsnutt tar emot det värde som kommer via länken. Visar de inlägg som besökaren vill se. Samt skriver ut nya länkar till gästboken startsida, till övriga inlägg samt till söksidan.

Detta är en fungerande exprimentkod. Mycket saknas dock. Bla. fillåsningar och lite annat smått och gott ;)
Finns säker många lösningar på ovanstående, men detta har jag skapat själv utifrån de förutsättningar jag haft, och det fungerar.
Du får dock inte se det som någon proffskod, utan mer som en presentation av en alternativ lösning.
Finns säker fler och bättre lösningar.

//Demo

[Redigerat av demo den 19 nov 2000]

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