Paginanummering v1

Door Wesley , 19 jaar geleden, 3.778x bekeken

Er stonden al wat versie's met paginanummering op het forum, maar die vond ik niet erg duidelijk geschreven, kwam er uiteindelijk op neer dat ze mij niet bevielen :P Vandaar heb ik er zelf maar 1 geschreven.

To do:
-

Inmiddels gedaan:
- Dropdownboxje toevoegen in plaats van textveld met 'Per pagina'

Voorbeeld: http://files.wesdesignz.nl/paginanummering/

Gesponsorde koppelingen

PHP script bestanden

  1. paginanummering-v1

 

Er zijn 6 reacties op 'Paginanummering v1'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
PHP Newbie
PHP Newbie
19 jaar geleden
 
0 +1 -0 -1
1.
Queries worden niet gecontrolleerd,

2.
Dit statement:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if ($_GET['pp'] != "" && $_GET['pp'] != NULL && is_numeric($_GET['pp']) && in_array($_GET['pp'], $iPerpagina_DDB)) {
?>


voor de eerste vergelijking hebben we de functie empty(). Die tweede vergelijking kan weg en die derde ook (je controlleert immers in de vierde vergelijking of de waarde in een array voorkomt)

3.
Je haalt alle data op terwijl je er maar een deel van gebruikt. Bij kleine hoeveelheden data is dat niet zo erg, maar je wilt straks geen 100.000 rijen uit de database gaan halen terwijl je er maar 50 nodig hebt..
Gebruik dus de SQL functie LIMIT

4.
maak geen gebruik van or die(). Verzin een mooiere oplossing zodat de pagina wel gewoon helemaal geparsed wordt.

5.
Meer persoonlijk, maar toch. Zorg dat je in je statement controlleert op een error. Check dus of het fout gaat, niet of dat het goed gaat. Daarmee voorkom je dat het statement op regel 223 zijn error heeft staan in de else op regel 295. Het is overzichtelijker om het zo te doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
if ($aOutput < 1)
{

    echo 'Geen output';
}

else
{
    //hier de code voor wanneer er wel resultaten zijn
}
?>


Op die manier houd je de errors bij de statements. Maar zoals ik al zei, dat is meer persoonlijk ;-)
Wesley
Wesley
19 jaar geleden
 
0 +1 -0 -1
Updated ;)

Empty() gebruik ik meestal niet omdat hij (bij mij in ieder geval) altijd denkt dat de string een waarde heeft. Queries heb ik aangepast, er zat een error als je hp een errorieuze waarde meegaf. Die() weggewerkt, de overbodige is_numeric bij de huidige pagina weggehaald en van de overige textvelden ook dropdowns gemaakt..
Frank -
Frank -
19 jaar geleden
 
0 +1 -0 -1
$rOutput = mysql_query("SELECT * FROM " . $dbTabel . " LIMIT 5000");

Dit is niet handig, hier heb je een COUNT() nodig, zie de rest van je code. Waarom de tabel in een variabele staat, is me een raadsel, tabellen zijn niet variabel, een datamodel is niet variabele. Daarnaast heb je zelden met dit soort hele simpele queries te maken, dit gaat dus niet werken.

Edit: Zie ook dit script, deze laat al zien dat je maar 2 queries nodig hebt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT COUNT(*) AS aantal FROM tabelnaam;

En
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT
  kolom,
  kolom2
FROM
  tabelnaam
LIMIT $max_per_pagina
OFFSET $startrij;

En ja, dit werkt in MySQL precies hetzelfde als in PostgreSQL.
Wesley
Wesley
19 jaar geleden
 
0 +1 -0 -1
COUNT(*) van gemaakt..

$dbTabel staat helemaal bovenaan bij de rest van de mysql-informatie, dan hoef je niet overal in de rest van het script uit te zoeken waar de queries staan. (Ja, het zijn er maar 2 maar het gaat om het idee)

Edit, count(*) weer weggehaald, hij deed het niet meer (lege results :|)
Lode
Lode
19 jaar geleden
 
0 +1 -0 -1
maak er een class van...
Scheid html / queries e.d.

zoiets:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
final class paginnation{

    private $range = array();

    /**
     * constructor
     * Create a range to parse.
     *
     * @param int $total
     * @param int $view
     * @param int $current
     * @param int $offset
     */

    final public function __construct($records, $show, $current, $offset){
        //empty container
        $this->range['<<'] = 1;    // eerste pagina    <<
        $this->range['<'] = (($current - 1) >= 1) ? ($current -1) : 1;   // vorige pagina <

        //total:

        $pages = $records / $show;

        //range maken:
        for($p = ($current - $offset); $p <= ($current + $offset); $p++){
            if($p >= 1 && $p <= $pages){
                $this->range[$p] = $p;
            }
        }

        //volgende:
        $this->range['>'] = (($current + 1) <= $pages) ? ($current +1) : $pages;   // vorige pagina >
        $this->range['>>'] = $pages;   // laatste pagina >>

        return $this->range;
    }

    /**
     * range
     * Return range
     *
     * @return array $range
     */

    final public function range(){
        return $this->range;
    }
}


$current = (isset($_GET['page']) && ctype_digit($_GET['page']) && $_GET['page'] > 0) ? $_GET['page'] : 1;
$sql = 'SELECT COUNT(1) AS records FROM tabel;';

//records, perpagina, current, links-rechts
$p = new paginnation(300, 20, 4, 5);

echo '<pre>'.print_r($p->range(), true).'</pre><br/>'.PHP_EOL;
//en dan hier opmaken....
//of met __toString(); iets standaards maken...

?>

kan je natuurlijk wel een paar vlaggetjes ofzo nog bijmaken.
Maar zoiets kan je veel makkelijker hergebruiken natuurlijk...

EDIT: zat nog foutje in...
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
B L
B L
19 jaar geleden
 
0 +1 -0 -1
Is het ook mogelijk om een gastenboek met .txt files te voorzien van paginanummering ?

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. paginanummering-v1

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.