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:


$per_pagina_record = 30;

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

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

$pagina=1;    

}


Dan onze tabel:


<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:


<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!
Adoptive Solution op 12/10/2022 12:11:05

Omdat dit topic nog wel een paar maanden zal aanhouden zonder dat een oplossing in zicht is, hier mijn bijdrage:

<style>
tr:nth-child(odd) {
	background: #dcdcdc;
	}

tr:nth-child(even) {
	background: #dcdcaa;
	}
</style>

<table style="width:50%; border: 1px solid red;">

<tbody>

<?php

$aantalrecords = 22; // opgehaald in database
$advertentie   = 5; // toon advertentie na zoveel regels

for ( $i = 0; $i < $aantalrecords; $i++ ):

	if ( $i % $advertentie == 0 && $i >= $advertentie ):
		echo '<tr><td>HIER ADVERTENTIE</td></tr>' . PHP_EOL;
	endif;

	echo '<tr><td><p>' . $i + 1 . ' data</p></td></tr>' . PHP_EOL;

endfor;

?>

</tbody>

</table>



YESSSS!!! Dit is al bijna helemaal top!!!

Ik krijg nu inderdaad 10 rows, advertentie, weer 10, advertentie enzovoort, enkel is wel dat de pagina nu ellenlang is, alle results ook 10 - 30 keer weergeven en dat pagina 2 niet begint op dit moment bij 30 maar dat zal tweaken zijn..

Bedankt al voor je bijdrage! Ben nu al stukken verder! :D
Dan moet je op zoek naar (de werking van) een pagination-script.
Deze zorgt voor een variabele query die aan de hand LIMIT (of OFFSET) in MySQL welke rijen er getoond worden.

1) Bepaal eerst het paginanummer vanuit $_GET. Is er geen $_GET['pagina'], start dan altijd bij 1.

<?php
   if (!isset ($_GET['pagina']) ) {  
        $paginanummer = 1;  
    } else {  
        $paginanummer  = $_GET['pagina'];  
    }  
?>


2) Schrijf de formule voor het aantal items per pagina:
<?php
$aantal = 5;
$startitem = ($paginanummer-1) * $aantal;
?>

3) Tel het totaal aantal pagina's

<?php
$sql= "SELECT * FROM items";
$result = mysqli_query($conn, $sql);  
$totaal = mysqli_num_rows($result); 
$aantalpaginas = ceil($totaal / $aantal);  // afronden naar boven van 16 / 3 = 4 pagina's en 15 / 3 is drie pagina's
 ?>


4) Pas je query aan op je formule en toon de rijen:
<?php
$sql= "SELECT * FROM items LIMIT " . $startitem. ',' . $aantal;
$result = mysqli_query($conn, $sql);
while ($row = mysqli_fetch_array($result)) {
echo $row['ID'] . ' ' . $row['Naam'] . '</br>';
}
?>

5) Toon de pagina's voor de navigatie in een for-loop:
<?php
for($paginanummer = 1; $paginanummer <= $aantalpaginas ; $paginanummer++) {
echo '<a href = "script.php?pagina='. $paginanummer.'">'.$paginanummer.'</a>';
}
?>

Je kan de laatste stap nog verder verfijnen door bijvoorbeeld de huidige pagina nummer niet klikbaar te maken, of een eigen stijl te geven, of enkel de voorgaande drie en de opvolgende x aantal pagina's in de rij te tonen. Een kwestie van experimenteren.

Mijn pagination werkte wel maar door dit script nu toegevoegd te hebben werkt het niet lekker meer :)

Ik krijg elke site als het ware 30 keer te zien, dit tot aan 30 stuks toe, op pagina 2 begint het opnieuw..

Moet even zien hoe dit uit te vogelen zodat het wel 'normaal' loopt..
Dan mis je blijkbaar een deel.
Ik zou zeggen: ga eens debuggen, en kijk stap voor stap wat er gebeurt en met name bij je LIMIT-query.

Ik neem aan dat je niet rücksichtslos kopieert en plakt.

Reageren