Tabel splitsen en meerdere pagina's

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 3 volgende »

Ray Mond

Ray Mond

19/08/2022 10:06:44
Quote Anchor link
Goedemorgen allen!

We hebben een site (soort toprank site) waarbij men sites kunnen aanmelden, doormiddel van clicks komen ze hoger op de pagina...

Alles werkt ook tot zover alleen willen wij de tabel die we hebben opsplitsen in 3 per pagina en wanneer we naar pagina 2 gaan klopt de telling niet meer.

Op pagina 1 zie je netjes nummer 1, 2, 3 enzovoor enzovoort.. Tot aan 30 toe maar wanneer we naar pagina 2 gaan begint de telling opnieuw, hier zal juist nummer 31 dan moeten komen.

Verder willen wij dus ook in plaats van 1 tabel die we nu hebben 3 tabellen per pagina laten zien met 10 records per tabel zodat we daar tussenin een advertentie ruimte kunnen maken.

Wie is hier eventueel heel handig in en kan dit snel vinden doormiddel van onze code?

Onze code bovenaan de pagina:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
$per_pagina_record = 30;

if (isset($_GET["pagina"])) {    

$pagina  = $_GET["pagina"];    
        
}    else {    

$pagina=1;    

}


Dan onze tabel:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<table class="tabel">
  <tr>
    <td class="tabelkop" style="width:5%;text-align: center;">Nummer</td>
    <td class="tabelkop" style="width:85%;text-align: center;">Naam en content</td>
  </tr>
  <?php
    $sql
= "SELECT * from websites WHERE `status` = '2' ORDER BY aantalin DESC LIMIT $start_from, $per_pagina_record";
    $return = $conn->query($sql );
                        
    while ($row = $return->fetch_object()){
        
    if($i%2 == 0)
    {

        $color = "row1"; // Kleur 1
    }
    else
    {
        $color = "row2"; // Kleur 2
    }
    ++
$i;
        
    echo '<tr class="'.$color.'"><td class="rank">'.$i.'</td><td class="col2">  <div style="text-align: center;"> <a href="index.php?uit='.$row->link_id.'" target="_blank"><img src="'.$row->banner.'" class="b468" alt="'.$row->site_naam.'"></a></div>  <a href="index.php?uit='.$row->link_id.'" target="_blank"><strong>'.$row->site_naam.'</strong></a><br>
    '
.$row->beschrijving.'  </td>
    </tr>'
; } ?>

</table>


En vervolgens onze pagination:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<div class="pagination">
<?php  
    $query
= "SELECT COUNT(*) FROM websites WHERE `status` = '2'";
    $rs_result = mysqli_query($conn, $query);
    $row = mysqli_fetch_row($rs_result);
    $total_records = $row[0];
          
    echo "</br>";

    $total_paginas = ceil($total_records / $per_pagina_record);
    $pagLink = "";
      
    if($pagina>=2){
        echo "<a href='index.php?pagina=".($pagina-1)."'><b> Vorige pagina </b></a>";
    }

                  
    for ($i=1; $i<=$total_paginas; $i++) {

    if ($i == $pagina) {
    
        $pagLink .= "<a class = 'active' href='index.php?pagina=".$i."'><b>".$i."</b> </a>";
    
    }
    else  {
        
        $pagLink .= "<a href='index.php?pagina=".$i."'><b>".$i."</b> </a>";
        
        }
    };

    
    echo $pagLink;
  
    if($pagina<$total_paginas){
        
        echo "<a href='index.php?pagina=".($pagina+1)."'><b> Volgende pagina </b></a>";
    
    }

?>

</div>


Dit werkt tot zo ver echt goed, althans voor de homepagina, wanneer we naar de 2e pagina gaan begint de telling opnieuw en we zouden graag de tabellen willen verdelen.

Alvast bedankt voor het lezen en helpen!
 
PHP hulp

PHP hulp

01/02/2023 10:12:25
 
Ozzie PHP

Ozzie PHP

19/08/2022 11:03:58
Quote Anchor link
Heb je deze code zelf geschreven?
 
Ray Mond

Ray Mond

19/08/2022 11:13:08
Quote Anchor link
Pagination bijvoorbeeld komt van Javatpoint af...
 
Ozzie PHP

Ozzie PHP

19/08/2022 11:19:42
Quote Anchor link
Les 1: begrijp de code die je zelf schrijft. Ongeacht waar die vandaan komt. Jij bent de programmeur, dus jij moet iedere letter code kunnen verklaren.

Terug naar je vraag. Ik ken jouw code dus niet, maar door 'm te lezen zie ik het volgende.

In je SQL-query staat een variabele $start_from. Omdat die nergens wordt geset zal die als 0 worden geïnterpreteerd. Dit betekent dat de LIMIT functie in je query altijd start bij 0. Echter, op pagina 2 moet die niet starten bij 0 maar bij 30. En op pagina 3 moet die niet starten bij 30 maar bij 60. Het enige wat je dus hoeft te doen is die $start_from instellen nadat je het paginanummer weet.

Had je deze code zelf geschreven, dan had je de vraag waarschijnlijk niet hoeven stellen ;-) Weet dus waar je mee bezig bent. Succes.
Gewijzigd op 19/08/2022 11:20:21 door Ozzie PHP
 
Ray Mond

Ray Mond

19/08/2022 11:22:15
Quote Anchor link
Klopt en snap ook zeker wat je hiermee wil aangeven maar heb verschillende dingen geprobeerd wat dit betreft en telkens wil het niet werken...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$start_from = ($pagina-1) * $per_pagina_record;


Deze was ik er nog bij vergeten te zetten, dit is de start_from
 
Ozzie PHP

Ozzie PHP

19/08/2022 11:29:16
Quote Anchor link
Dus precies de regel waar het om draait vergeet je te vermelden in je voorbeeld? ;-)


Voeg maar toe en kijk wat er gebeurt, ofwel debuggen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?

$start_from
= ($pagina-1) * $per_pagina_record;

echo '**** start = ' . $start_from . ' *****<br>';

?
 
- Ariën  -
Beheerder

- Ariën -

19/08/2022 11:50:12
Quote Anchor link
Eigenlijk is het heel simpel. Je hebt al de pagination die alle records verdeelt over meerdere pagina's. En je hebt een whileloop, die alles wat aan de voorwaarden voor de pagination voldoet, laat zien. Dan is het een kwestie om een optellende integer $i++ de telling plaats te laten vinden.

Op de eerste pagina start je met 0 buiten je while-loop waarbij je $i++ doet in je whileloop om er eentje bij op te tellen.
Uiteindelijk op de volgende pagina begin je met 30, en op de volgende pagina met 60. Dit aantal kan je prima bepalen aan de hand van de $_GET['pagina'] die het paginanummer omschrijft.
 
Ray Mond

Ray Mond

19/08/2022 11:52:28
Quote Anchor link
Ik moet hierbij wel vermelden dat de pagination later is gekomen dan alle overige..

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<table class="tabel">
  <tr>
    <td class="tabelkop" style="width:5%;text-align: center;">Nummer</td>
    <td class="tabelkop" style="width:85%;text-align: center;">Naam en content</td>
  </tr>
  <?php
    $sql
= "SELECT * from websites WHERE `status` = '2' ORDER BY aantalin DESC LIMIT $start_from, $per_pagina_record";
    $return = $conn->query($sql );
                        
    while ($row = $return->fetch_object()){
        
    if($i%2 == 0)
    {

        $color = "row1"; // Kleur 1
    }
    else
    {
        $color = "row2"; // Kleur 2
    }
    ++
$i;
        
    echo '<tr class="'.$color.'"><td class="rank">'.$i.'</td><td class="col2">  <div style="text-align: center;"> <a href="index.php?uit='.$row->link_id.'" target="_blank"><img src="'.$row->banner.'" class="b468" alt="'.$row->site_naam.'"></a></div>  <a href="index.php?uit='.$row->link_id.'" target="_blank"><strong>'.$row->site_naam.'</strong></a><br>
    '
.$row->beschrijving.'  </td>
    </tr>'
; } ?>

</table>


Hier werkte de telling al zonder pagination... toen was er enkel nog geen sprake van pagina 2, 3 enzovoort enzovoort... Ik weet dus dat de telling wel werkt echter wil ik het namelijk ook nog zo hebben dat het op de pagina's inderdaad verder zal gaan met 30, 60 enzovoort enzovoort.

Ook wil ik graag van 1 tabel per pagina die 3 laten zien van 10 per stuk... alleen valt dit net een beetje buiten mijn range geloof ik :)
 
- Ariën  -
Beheerder

- Ariën -

19/08/2022 11:57:05
Quote Anchor link
Waar komt $i vandaan? Ik neem aan dat die buiten je while-loop defineert als 1
Verder zie ik dat je ++$i gebruikt, terwijl het $i++ is.

Maar goed, je pagination werkt inmiddels? Dan kan je aan de hand van je $_GET['pagina'] bepalen waar je $i weer start.


Toevoeging op 19/08/2022 12:00:04:

Nog een goede tip:
Je hoeft echt niet met PHP te bepalen welke kleuren de rijen om en om zijn. Dan kan prima met CSS:

https://www.w3.org/Style/Examples/007/evenodd.en.html
Gewijzigd op 19/08/2022 12:00:18 door - Ariën -
 
Ray Mond

Ray Mond

19/08/2022 12:00:28
Quote Anchor link
De inmiddels geplaatste $i++ staat inderdaad wel enkel maar in de while... ik begrijp dat dit niet helemaal volledig correct is dan?

De pagination heeft altijd wel gewerkt, hij gaat netjes naar pagina 1 en 2 als voorbeeld maar de teller begint telkens op 0 wat juist bij pagina 2 op 30 zou moeten beginnen
 
- Ariën  -
Beheerder

- Ariën -

19/08/2022 12:02:43
Quote Anchor link
Zie ook mijn bericht net over die rijen met kleuren, die je denk ik net gemist hebt tijdens mijn edit.
Dat scheelt weer een paar lijnen aan PHP-code.

Ik heb het verhaal net al uitgelegd. Je moet de startwaarde van $i bepalen aan de hand van je $_GET['pagina'] en het aantal rijen.
 
Ozzie PHP

Ozzie PHP

19/08/2022 12:05:57
Quote Anchor link
Zie mijn laatste post hierboven. Al geprobeerd?
 
Ray Mond

Ray Mond

19/08/2022 13:18:25
Quote Anchor link
Ozzie PHP op 19/08/2022 12:05:57:
Zie mijn laatste post hierboven. Al geprobeerd?


Hier had ik ook wat mee geprobeerd maar dan kreeg ik vanaf 0, 2, 4 te zien...

ik ben inmiddels een stap verder:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$per_pagina_record = 30;

if (isset($_GET["pagina"])) {

$pagina  = $_GET["pagina"];
        
}    else {

$pagina=1;

}
    
$start_from = ($pagina-1) * $per_pagina_record;

$i = $start_from;


Hiermee begint hij op pagina 1 op 1 te tellen en op pagina 2 krijg ik nu 30 te zien en op pagina 3 60 enzovoort, dit werkt nu ideaal lijkt me dan zo.

Nu zou ik graag nog willen dat ik dus 3 tabellen per pagina kan krijgen, hoe is dit te realiseren?

Dus als het ware zo:

1-10

ruimte over voor iets

11 - 20

ruimte

21 - 30
Gewijzigd op 19/08/2022 13:19:24 door Ray Mond
 
- Ariën  -
Beheerder

- Ariën -

19/08/2022 13:43:56
Quote Anchor link
Met de modulo-operator.
 
- Ariën  -
Beheerder

- Ariën -

22/08/2022 10:00:25
Quote Anchor link
En is het nog gelukt?
 
Ray Mond

Ray Mond

23/08/2022 17:15:44
Quote Anchor link
Helaas tot nu nog niet nee...
 
- Ariën  -
Beheerder

- Ariën -

23/08/2022 17:47:29
Quote Anchor link
Waar loop je op vast?
 
Jan Koehoorn

Jan Koehoorn

23/08/2022 18:17:58
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
$get
        = (object) $_GET;
$pag_size   = 30;
$group_size = 10;

if ( ! empty($get->pag)) {
    $number_first = ($get->pag - 1) * $pag_size + 1;
    $number_last  = $number_first + $pag_size;
}

?>


<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title></title>
    <style>
        body {font: 14px Verdana;}
    </style>
</head>

<body>
<?php
if ( ! empty($number_first)) {
    for ($i = $number_first; $i < $number_last; $i++) {
        printf('<p>This is item nr %d</p>', $i);
        if ($i % $group_size === 0 && ($pag_size * $get->pag) !== $i) {
            printf('<hr>');
        }
    }
}

?>

</body>

</html>
 
Ray Mond

Ray Mond

23/08/2022 18:23:33
Quote Anchor link
Echt het verdelen van de tabellen krijg ik niet voor elkaar...

Alles werkt, pagination, aantallen per pagina maar ik wil echt zeg maar nu op elke pagina 3 tabellen van 10 per stuk en daar kom ik niet uit jammer genoeg.
 
Jan Koehoorn

Jan Koehoorn

23/08/2022 18:27:40
Quote Anchor link
Zie regel 29 van mijn voorbeeld :-)
 
Ray Mond

Ray Mond

23/08/2022 18:28:52
Quote Anchor link
Wat ik begrijp gaat dat om aantal items en dan welke pagina en dan naar de volgende pagina toch?

Die werking is er al volledig..

Wat ik echt wil is dat de 30 items per pagina per tabel nu zijn zal veranderen naar 10 per tabel zeg maar
Gewijzigd op 23/08/2022 18:30:00 door Ray Mond
 

Pagina: 1 2 3 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.