Ik heb nu een klein script die alle in-game reports laat zien.
Maar nu is het zo dat de pagina super lang word.

Hoe kan ik nou op deze zelfde pagina iets maken waardoor je naar next page en previous page kan gaan?

Wat ik me zo kan bedenken:
Als er bijv 10 rijen zijn, wordt de 11e en de daaropvolgende niet meer laten zien, maar komt er een next page knopje.
Als het goed is kan ik dit doen met rowid. Bijv alleen rowid 1 tm 10 laten zien.
En stel je voor ik heb dan index.php?p=reports en daar wil ik index.php?p=reports&page=2 van maken.
dan zou ik bij page=2 bijvoorbeeld alleen 11 tm 20 laten zien.

Alleen wat ik hierboven heb beschreven lijkt me niet de beste manier om dit te doen, en mijn vraag is dan. Wat is wel de juiste manier om dit te doen?

Want met de manier die ik zojuist beschreven heb zou ik dus iedere pagina moeten aangeven. en als ik er maar 10 heb gemaakt en er zijn er dan 11 heb ik dus een probleem.
Heb je al eens gekeken op het trefwoord: 'pagina navigatie' of 'page navigation'
- Ariën - op 23/02/2018 22:53:39

En als je het zelf wilt bouwen/begrijpen:
http://www.sitemasters.be/tutorials/1/1/198/PHP/Pagina_navigatie_in_PHP_en_MySQL

Ik zou het dan wel meteen herschrijven naar MySQLi.


Bedankt voor de link. In mijn geval dus sqlite.:P
Nu heb ik geprobeerd om dit te doen maar ik krijg de volgende errors:



Notice: Undefined index: Status in D:\AppServ\www\ucp\reports.php on line 68

Notice: Undefined index: ID in D:\AppServ\www\ucp\reports.php on line 78

Notice: Undefined index: PlayerName in D:\AppServ\www\ucp\reports.php on line 87

Notice: Undefined index: Reporter in D:\AppServ\www\ucp\reports.php on line 88

Notice: Undefined index: Report in D:\AppServ\www\ucp\reports.php on line 89

Notice: Undefined index: Date in D:\AppServ\www\ucp\reports.php on line 90

Notice: Undefined index: ID in D:\AppServ\www\ucp\reports.php on line 91
'.(0+1).'
#	Status	Name	Reported By	Report	Date	Action
Pending					View report 
Notice: Undefined index: ID in D:\AppServ\www\ucp\reports.php on line 92


Ik heb iets fout gedaan waarschijnlijk met dit:
$res2q = "SELECT * FROM REPORTS ORDER BY ID DESC LIMIT '$offset','$items_per_pagina'";

maar geen idee wat ik fout heb gedaan.

Dit is mijn code:

<?php
  error_reporting(E_ALL);
   $nrows = 0;
   $res1q = "SELECT COUNT(ID) FROM REPORTS";
   $res1 = $db->query($res1q);
   while($res1->fetchArray(SQLITE3_ASSOC) )
   {
      $nrows++;
   }   
   $items_totaal = $nrows;
   $res1->finalize();
   $items_per_pagina = 5; 
   $aantal_paginas =  ceil($items_totaal / $items_per_pagina);

  $huidige_pagina = 0; // default
  if(isset($_GET['p']) && is_numeric($_GET['p']) && $_GET['p'] > 0 && $_GET['p'] < $aantal_paginas) {
    $huidige_pagina = $_GET['p'];
  }

  $offset = $huidige_pagina * $items_per_pagina;
  $res2q = "SELECT * FROM REPORTS ORDER BY ID DESC LIMIT '$offset','$items_per_pagina'";
  $res2 = $db->query($res1q);
 while($row = $res2->fetchArray(SQLITE3_ASSOC) )
 {
        $status = $row['Status'];
        if($status==1)
        {
          echo "<tr class='success'>";
          echo "<td>". $row['ID'] . "</td>";
          echo "<td>Open</td>";
        }
        elseif($status==0) 
        {
          echo "<tr class='warning'>";
          echo "<td>". $row['ID'] . "</td>";
          echo "<td>Pending</td>";
        }
        elseif($status==2) 
        {
          echo "<tr class='danger'>";
          echo "<td>". $row['ID'] . "</td>";
          echo "<td>Closed</td>";
        }
       echo "<td>". $row['PlayerName'] . "</td>";
       echo "<td>". $row['Reporter'] . "</td>";
       echo "<td>". $row['Report'] . "</td>";
       echo "<td>". $row['Date'] . "</td>";
       echo "<td><a href='index.php?p=viewreport&id=". $row['ID'] . "'><button class='btn btn-info'>View report</button></a>&nbsp;";
       echo "<a href='index.php?p=deletereport&id=". $row['ID'] . "'><button class='btn btn-danger'>Delete</button></a></td>";
       echo "</tr>";
 } 
 $res2->finalize();
 for($i = 0; $i < $aantal_paginas; $i++) {
    if($huidige_pagina == $i) {
        echo "<b>'.($i+1).'</b>";
    } else {
        echo "<a href='".$_SERVER['PHP_SELF']."?p=".$i."'>'.($i+1).'</a>";
    }
    if($i < $aantal_paginas - 1) {
        echo " - ";
    }
}
 $db->close();

?>


[size=xsmall]Toevoeging op 24/02/2018 00:16:34:[/size]

dit werkt ook niet:

$res2q = "SELECT * FROM REPORTS ORDER BY ID DESC LIMIT " . $offset . "," . $items_per_pagina;
Ik denk dat de veldnamen niet kloppen in je je $row-variabelen. Debug deze array anders eens met print_r().

Ik raad ook aan om nooit * te gebruiken, maar altijd alle veldnamen te benoemen. En die single-qutoes in je query (lijn 21) kloppen ook niet met de double-quotes die je daar gebruikt.
- Ariën - op 24/02/2018 00:16:44

Ik denk dat de veldnamen niet kloppen in je je $row-variabelen. Debug deze array anders eens met print_r().

Ik raad ook aan om nooit * te gebruiken, maar altijd alle veldnamen te benoemen. En die single-qutoes in je query (lijn 21) kloppen ook niet met de double-quotes die je daar gebruikt.


De veldnamen kloppen wel eigenlijk. Geen idee wat de fout was. Denk dat het een baggere tutorial was want had hem zo uit de tutorial overgenomen.

Ik heb de volgende link als voorbeeld gebruikt, en dat werkt gelukkig prima.
https://stackoverflow.com/questions/41777993/php-pagination-next-previous-button
Zoals ik al zei: Ga je script eens debuggen door de waardes achter de variabelen te tonen.

Het is zeker ook leerzaam! Door naar een ander script te grijpen leer je natuurlijk niks.
- Ariën - op 24/02/2018 02:14:59

Zoals ik al zei: Ga je script eens debuggen door de waardes achter de variabelen te tonen.

Het is zeker ook leerzaam! Door naar een ander script te grijpen leer je natuurlijk niks.


Dat ligt eraan wat je doet met het script. Maar je hebt gelijk inderdaad over niets leren.
Ik heb het nu voor mekaar maar echter nog een vraag.
Is er een manier om te kijken welke pagina de laatste pagina is?

Bijvoorbeeld op de eerste pagina wil ik niet dat de previous knop word laten gezien en dat doe ik zo:

if($page != 1)
    {
    echo "<li><a href='index.php?p=admin&option=reports&page=".($page-1)."' class='button'>Previous</a></li>"; 
    }


hoe kan ik dit met de laatste pagina ook doen?

Dit is de volledige code die ik nu heb:

<?php
error_reporting(E_ALL);
 
 $limit = 20; 
  if (isset($_GET["page"] )) 
      {
      $page  = $_GET["page"]; 
      } 
  else 
     {
      $page=1;
     };  
 

 $record_index= ($page-1) * $limit;  
 $sql = "SELECT * FROM REPORTS LIMIT $record_index, $limit"; 
 $stmt = $db->query($sql);

 while($row = $stmt->fetchArray(SQLITE3_ASSOC) )
 {
        $status = $row['Status'];
        if($status==1)
        {
          echo "<tr class='success'>";
          echo "<td>". $row['ID'] . "</td>";
          echo "<td>Open</td>";
        }
        elseif($status==0) 
        {
          echo "<tr class='warning'>";
          echo "<td>". $row['ID'] . "</td>";
          echo "<td>Pending</td>";
        }
        elseif($status==2) 
        {
          echo "<tr class='danger'>";
          echo "<td>". $row['ID'] . "</td>";
          echo "<td>Closed</td>";
        }
       echo "<td>". $row['PlayerName'] . "</td>";
       echo "<td>". $row['Reporter'] . "</td>";
       echo "<td>". $row['Report'] . "</td>";
       echo "<td>". $row['Date'] . "</td>";
       echo "<td><a href='index.php?p=viewreport&id=". $row['ID'] . "'><button class='btn btn-info'>View report</button></a>&nbsp;";
       echo "<a href='index.php?p=deletereport&id=". $row['ID'] . "'><button class='btn btn-danger'>Delete</button></a></td>";
       echo "</tr>";
 }

 
 $stmt->finalize();

 $sql = "SELECT COUNT(*) FROM REPORTS"; 
  $stmt = $db->query($sql);  
$row = $stmt->fetchArray(SQLITE3_ASSOC);  
    //  echo $total_records;
$total_pages = ceil($countrows / $limit);  
//$pagLink = "<div class='pagination'>";  
for ($i=1; $i<=$total_pages; $i++) {  

    echo "<p align='center'><ul class='pagination'>";
    if($page != 1)
    {
    echo "<li><a href='index.php?p=admin&option=reports&page=".($page-1)."' class='button'>Previous</a></li>"; 
    }
    echo "<li><a href='index.php?p=admin&option=reports&page=".$page."'>Page ".$page."</a></li>";
    echo "<li><a href='index.php?p=admin&option=reports&page=".($page+1)."' class='button'>Next</a></li></p>";


    echo"</ul>";               
};
 $db->close();
?>
Jasper, kijk eens goed naar je script: En dan vooral naar $total_pages en je $_GET['page'].

En ik denk dat het wenselijk is om de for-loop alleen maar van de oplopende nummers uit $total_pages te voorzien. De linkjes 'next' en 'previous' horen daar niet in. Alleen wel weer een statement om de huidige pagina in de rij getallen visueel duidelijk te maken met een vergelijking tussen $_GET['page'] en $total_page.

Reageren