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.
Jasper Schellekens op 24/02/2018 02:06:02
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.

Dus je knipt en plakt iets dat meer dan tien jaar oud is en wat tevens geschreven is voor een andere database, en het werkt niet direct? Dat moet wel aan de tutorial liggen dan :).

Jasper Schellekens op 24/02/2018 00:09:24
geen idee

Mogelijk ligt hier de oorzaak. Als je iets niet begrijpt, maakt het dat niet noodzakelijkerwijs fout.

Ik vraag mij sterk af of je uberhaupt de moeite hebt genomen om de begeleidende tekst te lezen. Ook onderschat je waarschijnlijk de tijd en moeite die is gaan zitten in het schrijven van deze tutorial die probeert duidelijk uit te leggen wat het concept "pagina-navigatie" nu precies inhoudt. Iets met niet verder kijken dan je neus lang is.

Los van het feit dat de code gedateerd is (ik zou het e.e.a. anders aanpakken tegenwoordig) is het idee nog steeds hetzelfde.

Als je het idee begrijpt, dan lijkt het mij niet zo lastig om dit te vertalen naar hedendaagse code, met mogelijk specifieke aanpassingen voor een SQLITE-database.

EDIT: enne,
$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>";
}

dat kan wel wat korter anders he? Of liever gezegd, het is niet zinnig om iets wat je op eenzelfde (maar inhoudelijk verschillende) manier wordt weergegeven in drie template-snippets te zetten.

Ook doe je er verstandig aan om ampersands in hyperlinks te encoden als &amp; ten einde misinterpretatie te voorkomen.

Daarnaast is het echt nergens voor nodig om al die lappen HTML te echo'en. Je kunt PHP-blokken op elk moment staken en weer voortzetten.

Schot voor de boeg: scheid applicatielogica en presentatielogica:
<?php
switch ($row['Status']) {
    case 0:
        $class = 'warning';
        $text = 'Pending';
    break;
    case 1:
        $class = 'success';
        $text = 'Open';
    break;
    case 2:
        $class = 'danger';
        $text = 'Closed';
    break;
}
?><tr class="<?php echo $class ?>">
    <td><?php echo $row['ID'] ?></td>
    <td><?php echo $text ?></td>
</tr>
Bedankt voor jullie reacties.

[size=xsmall]Toevoeging op 24/02/2018 13:19:04:[/size]

Door te debuggen ben ik erachter gekomen dat $total_pages altijd 1 is omdat countrows ook 1 was.
Ik probeerde de rows te tellen doormiddel van countrows++; maar helaas werkt dat niet.
Nu probeer ik het volgende, van de volgende pagina maar krijg de volgende errors
http://www.nusphere.com/kb/phpmanual/function.sqlite-num-rows.htm

Zie ik nou iets over het hoofd of wat doe ik verkeerd?

$countrows = sqlite_num_rows($stmt);
Dit geeft error Fatal error: Call to undefined function sqlite_num_rows() in D:\AppServ\www\ucp\reports.php on

$countrows = $stmt->numRows();
Dit geeft error Fatal error: Call to undefined method SQLite3Result::numRows() in D:\AppServ\www\ucp\reports.php on line 62




[size=xsmall]Toevoeging op 24/02/2018 13:29:16:[/size]

Ik heb het opgelost. Mocht iemand interesse hebben in de oplossing:

<?php
    function SqliteNumRows($query){
        $numRows = 0;
        while($rows = $query->fetchArray()){
            ++$numRows;
        }
        return $numRows;
    }
?>
$countrows = SqliteNumRows($stmt);

Dat lijkt mij geen goede oplossing. Daarmee tel je alle rijen, wat nogal overkill is.

In een voorgaand codefragment staat $countrows ook nergens gedefinieerd, weet je zeker dat deze wel een goede waarde krijgt? Hoe wordt die bepaald?

En ja, het aantal resultaatrijen van een COUNT()-query is altijd één, het is de bedoeling dat je van zo'n query het COUNT()-resultaat pakt, en niet het aantal rijen telt.

Zoals je op PHP.net kunt zien is sqlite_num_rows() / SQLite::numRows() niet standaard meer inbegrepen in PHP vanaf versie 5.4.0:
(PHP 5 < 5.4.0, PECL sqlite >= 1.0.0)

PDO heeft ook een SQLite driver, maar je zult moeten kijken of die voor jou ook beschikbaar is.
Mag ik vragen wat de reden is waarom er SQL-lite wordt gebruikt, in plaats van de MySQLi-driver voor MySQL/MariaDB databases? SQL-Lite kent weer nadelen dat er geen useraccess aan vast zit ("wil je wel delete-rechten hebben binnen je frontend?"), en dat het minder goed te tunen is.

Als je meer wilt weten over MySQL, SQL-lite en PostgreSQL, dan is dit leuk leesvoer:
https://www.digitalocean.com/community/tutorials/sqlite-vs-mysql-vs-postgresql-a-comparison-of-relational-database-management-systems

Ik zie het niet vaak, maar misschien is het natuurlijk een bewust en zorgvuldig gekozen keuze.
Daar heb ik zou mijn twijfels bij als je SQLite voor een webgame wilt gebruiken:
Situations Where A Client/Server RDBMS May Work Better
...
High Concurrency

SQLite supports an unlimited number of simultaneous readers, but it will only allow one writer at any instant in time. For many situations, this is not a problem. Writer queue up. Each application does its database work quickly and moves on, and no lock lasts for more than a few dozen milliseconds. But there are some applications that require more concurrency, and those applications may need to seek a different solution.

Op dezelfde pagina staat ook een checklist waarmee je kunt bepalen in hoeverre SQLite geschikt is voor wat je probeert te doen.

Come to think of it: voor @Hans de Ridder zou SQLite mogelijk wel een geschikt(er) alternatief zijn dan al die IPTC mumbo-jumbo.

Reageren