Avatar billede lsskaarup Nybegynder
04. august 2004 - 20:22 Der er 5 kommentarer og
1 løsning

Paging af simpel tekst udtrukket fra MySQL

Jeg har en tekst, som jeg godt vil have delt over f.eks. 3 sider, men den skal være dynamisk, så sidetallet passer til længden af teksten, hvis I forstår.

Jeg har trukket teksten ud fra db'en, og via nl2br også fået lavet afsnitsskifts, så det er kun selve pagingen, jeg skal have lidt hjælp til.

Jeg overvejer at analyser teksten, og lede efter <br> som jo gerne skulle være et naturligt skift, men hvordan gør jeg lige, så den f.eks. lave et sideskift efter 3 <br>?
Avatar billede lsskaarup Nybegynder
04. august 2004 - 20:24 #1
Grunden til at det skal være dynamisk med hensyn til sidetallet, er fodi brugerne skal kunne ændre i teksten, som deraf kan blive både længere og kortere.
Avatar billede intenz Novice
04. august 2004 - 20:33 #2
Det her er et skud lidt hurtigt lavet, ved ikke om det virker. Jeg har ikke så meget tid i dag, hvis du ikke har fundet ud af det i morgen skal jeg nok kigge på det.

$pos = "0";
$sidetal = "0";

while ($sidetal != "3") {
$start = strpos($text, "<br>", $pos) + strlen("<br>");
$anden = strpos($text, "<br>", $start) + strlen("<br>");
$sidste = strpos($text, "<br>", $anden) + strlen("<br>");

$len = $sidste - $start;
$pos = $sidste;
$sidetal++;
$side[$sidetal] = substr($text, $start, $len);
}

print "$side[1]";
print "$side[2]";
print "$side[3]";
Avatar billede lsskaarup Nybegynder
04. august 2004 - 20:47 #3
Nej det virker ikke umiddelbart
Avatar billede lsskaarup Nybegynder
04. august 2004 - 22:26 #4
Jeg har nu selv fået lavet dette, som virker til at få skrevet teksten ud, dog kun på 1 side endnu.

$historie = mysql_query("SELECT * FROM RS_Historie");
$history = mysql_fetch_array($historie);
$info = nl2br($history[tekst]);
$hej = explode('<br />', $info);

echo $hej[0];
?><br><br><?
echo $hej[2];
?><br><br><?
echo $hej[4];
?><br><br><?
echo $hej[6];
?><br><br><?
echo $hej[8];

Jeg kører med dobbelt <br>, for at fastholde nogle pæne afsnit.

Min ide er nu at finde længden på arrayet, for på den måde at udregne hvor mange sider der skal bruges, hvis jeg f.eks. kun vil have 3 afsnit pr. side.
Avatar billede lsskaarup Nybegynder
05. august 2004 - 01:19 #5
Okay, nu er jeg kommet rimeligt langt, hvis jeg selv skal sige det.

Det eneste problem jeg har, er en akkumulering. Det er lidt svært at forklare, men for at finde det nye index i arrayet, som jeg skal bruge til at få de bestemte afsnit uf af DB'en, har jeg sagt at den skal gange med sidetallet-1, men det passe kun til og med side 3, allerede med side 4 går det galt.

Så jeg skal lige have fundet en måde, så værdierne bliver som følger:

Side      Index
1          0
2          6
3          12
4          18
5          24

osv.

Min kode lige nu ser sådanne ud:

<?php
include 'forbindelse.php';
session_start();

$historie = mysql_query("SELECT * FROM RS_Historie");
$history = mysql_fetch_array($historie);
$info = nl2br($history[tekst]);
$hej = explode('<br />', $info);//Der er 2 <br /> imellem hvert afsnit, derfor vil de lige arrays indeholde denne string " ", så huske derfor at bruge <br> til at lave nye linieskift med
$længde = count($hej);//Finder længden af array, både afsnit og afsnitsmellemrum
$prSide = 6;//Antal afsnit og mellemrum pr. side. Det sidste mellemrum er med for ikke at komme på næste side
$antalSider = ceil($længde/$prSide);//Udregner hvor mange sider der skal bruges, ud fra de 2 forgående oplysninger
$output; //Variable til udskrive historie-teksten med. Bruges i forløkken
$aktuelleSide;
//for ($gennemløb=0;$gennemløb<$antalSider;$gennemløb++){
if (!$_GET[side] || $_GET[side]==1) {
    $aktuelleSide = 1;
    $arrayIndex = $prSide;
   
?>
<html>
<head>
<title>test af paging, som skal gøres over én lang tekst</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form action="<?echo $PHP_SELF?>" method="POST" name="paging" target="_top">
<table>
    <tr>
        <td><?
            for ($index = 0; $index < $prSide; $index++) {
                $output = $hej[$index];
                ?><br><?
                echo $output;
            }?>
        </td>
    </tr>
    <tr>
        <td><?=$aktuelleSide?></td><td><a href="paging.php?side=<?=$aktuelleSide+1?>&index=<?=$arrayIndex?>" target="_top">></a></td>
    </tr>
</table>
</form>
</body>
</html>
<?
//}
} else if ($_GET[side]>1 && $_GET[side]<$antalSider) {//Alle sider imellem den første og den sidste
    $aktuelleSide = $_GET[side];
    $næsteSide = $aktuelleSide + 1;
    $forrigeSide = $aktuelleSide -1;
    $arrayIndex = $_GET[index];
    $nyArrayIndex = $arrayIndex*($næsteSide-1);
    $forrigeArrayIndex = $arrayIndex - $prSide;
?>       
<html>
<head>
<title>test af paging, som skal gøres over én lang tekst</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form action="<?echo $PHP_SELF?>" method="POST" name="paging" target="_top">
<table>
    <tr>
        <td><?
            for ($index = $arrayIndex; $index < $prSide+$arrayIndex; $index++) {
                    $output = $hej[$index];
                    ?><br><?
                    echo $output;
            }?>
        </td>
    </tr>
    <tr>
        <td><a href="paging.php?side=<?=$forrigeSide?>&index=<?=$forrigeArrayIndex?>" target="_top"><</a></td><td><?=$aktuelleSide?></td><td><a href="paging.php?side=<?=$næsteSide?>&index=<?=$nyArrayIndex?>" target="_top">></a></td>
    </tr>
</table>
</form>
</body>
</html>
<?
} else if ($_GET[side]==$antalSider) {//Den sidste side
    $aktuelleSide = $_GET[side];
    $arrayIndex = $_GET[index];
    $forrigeArrayIndex = $arrayIndex - $prSide;
?>       
<html>
<head>
<title>test af paging, som skal gøres over én lang tekst</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form action="<?echo $PHP_SELF?>" method="POST" name="paging" target="_top">
<table>
    <tr>
        <td><?
            for ($index = $arrayIndex; $index < $prSide+$arrayIndex; $index++) {
                    $output = $hej[$index];
                    ?><br><?
                    echo $output;
            }?>
        </td>
    </tr>
    <tr>
        <td><a href="paging.php?side=<?=$aktuelleSide-1?>&index=<?=$forrigeArrayIndex?>" target="_top"><</a></td><td><?=$aktuelleSide?></td>
    </tr>
</table>
</form>
</body>
</html>
<? }
?>
Avatar billede lsskaarup Nybegynder
05. august 2004 - 01:39 #6
Nu skal jeg vist snart i seng, når man bruger så lang tid på så simpel en løsning, som faktisk brude være lige foran næsen på én, men ak.

Løsningen er at

$nyArrayIndex = $arrayIndex*($næsteSide-1);

ændres til

$nyArrayIndex = $aktuelleSide*$prSide;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester