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!
Heb alles geprobeerd, bij 1 result is het wel goed... bij meerdere dan zit het niet in de tabel...

Ook wanneer ik alles aanpas dan werken de tellingen weer niet op de andere pagina's..

Blijkt dus best wel lastig te zijn om dit werkend te krijgen samen met 3 tabellen?

En wat ik zag van Ivo was ook leuk met de function_ad alleen dan is het wel 1 vast advertentie overal toch?
Ray Mond op 25/08/2022 10:10:54

Heb alles geprobeerd, bij 1 result is het wel goed... bij meerdere dan zit het niet in de tabel...

Ook wanneer ik alles aanpas dan werken de tellingen weer niet op de andere pagina's..

Blijkt dus best wel lastig te zijn om dit werkend te krijgen samen met 3 tabellen?

Je moet één tabel maken, en met die module-operator splits je die steeds af, of je gebruikt een colspan...


En wat ik zag van Ivo was ook leuk met de function_ad alleen dan is het wel 1 vast advertentie overal toch?

Klopt, maar je kan eventueel een telling maken en verschillende advertenties tonen

als je in die functie iets doe als

SELECT * from advertenties ORDER BY RAND() LIMIT 1

krijg je een willekeurige advertentie. (mogelijk dus dubbelen. En dat kun je met wat extra fantasie ook wel weer oplossen.)

Bedoeling van de aanroep was "regel hier dat er een advertentie komt". Hoe je dat doet
- uit je database
- hard coded
- uit een advertentie netwerk

is aan jou
@Ivo:

Hoe verwerk ik jouw deel in mijn bestaande?


<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>
Welk deel bedoel je? Die query met RAND?
Het liefst met dat deel erin dat het 10 per tabel is op de pagina :P met de advertenties ertussen als het ware.
Dat doe je min of meer toch al met je module operator?
Nu zet je om de regel row1 of row2 neer.

Als je dit aanpast naar: if($i%5 == 0), dan kan je om de vijf items een advertentie tonen.

Maar heb je de rest van dit topic al gelezen? Er staan onder andere ook goede tips in om die gekleurde rijen via CSS aan te pakken.
Ik had de rest gelezen inderdaad en snap wel dat kleuren via css te doen zijn maar aangezien dit om en om moet gebeuren zie ik geen andere optie?

Via css is het locked op kleur en dan heb je maar een bepaalde kleur... Nu is het mooi om en om.

Wat je hierboven aangeeft is op dit moment dan ook voor de kleuren inderdaad, daar kan je dus geen ads tussenzetten of iets dergelijks, dat gaat niet werken...

row1 en row2 zorgen enkel voor de kleuren, tekst komt niet in beeld...

De code werkt verder perfect hoor, dat is het niet, ik wil echter dus alleen na die 10 rows een spatie hebben eigenlijk, reclame vak er in en dan moeten de volgende 10 komen met advertentie ruimte
Via CSS kan je prima om-en-om een rij kleuren.

- Ariën - op 19/08/2022 11:57:05

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


Met de modulo-operator kan je prima om de xx aantal rijen een advertentie tonen. Beiden had overigens ook gekund, maar stijlen wil je liever semantisch afhandelen via CSS.
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>

Reageren