Tabel splitsen en meerdere pagina's
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:
Dan onze tabel:
En vervolgens onze pagination:
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!
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)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
$per_pagina_record = 30;
if (isset($_GET["pagina"])) {
$pagina = $_GET["pagina"];
} else {
$pagina=1;
}
if (isset($_GET["pagina"])) {
$pagina = $_GET["pagina"];
} else {
$pagina=1;
}
Dan onze tabel:
Code (php)
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
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>
<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)
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
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>
<?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!
Heb je deze code zelf geschreven?
Pagination bijvoorbeeld komt van Javatpoint af...
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.
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
Klopt en snap ook zeker wat je hiermee wil aangeven maar heb verschillende dingen geprobeerd wat dit betreft en telkens wil het niet werken...
Deze was ik er nog bij vergeten te zetten, dit is de start_from
Deze was ik er nog bij vergeten te zetten, dit is de start_from
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:
Voeg maar toe en kijk wat er gebeurt, ofwel debuggen:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?
$start_from = ($pagina-1) * $per_pagina_record;
echo '**** start = ' . $start_from . ' *****<br>';
?
$start_from = ($pagina-1) * $per_pagina_record;
echo '**** start = ' . $start_from . ' *****<br>';
?
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.
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.
Ik moet hierbij wel vermelden dat de pagination later is gekomen dan alle overige..
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 :)
Code (php)
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
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>
<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 :)
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
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 -
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
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
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.
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.
Zie mijn laatste post hierboven. Al geprobeerd?
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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;
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
Met de modulo-operator.
En is het nog gelukt?
Helaas tot nu nog niet nee...
Waar loop je op vast?
Code (php)
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
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>
$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>
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.
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.
Zie regel 29 van mijn voorbeeld :-)
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
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




