Multidesk.be » Forums » PHP » Paginatelling fout

  • Pagina
  • 1 van 1
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door Thootje op zaterdag 16 februari 2008 om 18:44:23.
Thootje heeft nog geen avatar toegevoegd
Multiviteit: 51
Hallo,

Ik heb net bij de artikels gelezen van de paginanummering. Ik heb alles gewijzigt zo en in het script gezet. Wat gebeurt er:
~ Hij geeft wel de tweede pagina (na de 25 wat ik heb ingevoerd in de LIMIT) maar hij telt door. Dus op pagina twee zie je ook wat op pagina 1 staat en op pagina 1 zie je wat eigenlijk op pagina 2 hoort.

Het script:

PHP
  1. <?php
  2.  
  3. // Nakijken of er in de URL een paginanummer is opgegeven.
  4. if(isset($_GET['pagina']))
  5. {
  6.        
  7.         // Pagina nummer werd opgegeven, dus vangen we dit op in een variabel.
  8.         $paginaNummer = $_GET['pagina'];
  9.        
  10.        
  11. }
  12. // Er werd geen paginanummer opgegeven...
  13. else
  14. {
  15.        
  16.         // ... dus zitten we op de allereerste pagina.
  17.         $paginaNummer = 1;
  18.        
  19. }
  20.  
  21.  
  22. $totaalAantalRecords = mysql_result(mysql_query("SELECT COUNT(*) as totaalAantalRecords FROM leden"),0);
  23.  
  24. // Onze klasse invoegen.
  25. require_once("pagina_config.php");
  26.  
  27. // Nieuw object aanmaken om de paginanummering op te stellen.
  28. $paginaNummering = new PaginaNummering;
  29.  
  30. // In principe hoeven we de derde parameter niet op te geven, aangezien deze standaard reeds ingevuld werd in de klasse.
  31. $paginaNummering->construct($totaalAantalRecords, $paginaNummer, 25);
  32.  
  33. // Query uitvoeren die enkel die records ophaalt die we tonen op deze pagina
  34. $query = mysql_query("SELECT * FROM leden LIMIT ".$paginaNummering->getLimit().", ".$paginaNummering->getAantalRecordsPerPagina());
  35.  
  36. // Lus om de records te tonen
  37. // ...
  38.  
  39. echo $paginaNummering->getPaginaLijst();
  40.  
  41. ?>


En het pagina_config scriptje:

PHP
  1. <?php
  2.  
  3. class PaginaNummering
  4. {
  5.        
  6.         var $totaalAantalRecords;
  7.         var $huidigePagina;
  8.         var $aantalRecordsPerPagina;
  9.        
  10.         /*
  11.         * Constructor
  12.         */
  13.         function construct($totaalAantalRecords, $huidigePagina, $aantalRecordsPerPagina = 25)
  14.         {
  15.                
  16.                 $this->totaalAantalRecords = $totaalAantalRecords;
  17.                 $this->huidigePagina = $huidigePagina;
  18.                 $this->aantalRecordsPerPagina = $aantalRecordsPerPagina;
  19.                
  20.         }
  21.        
  22.         /*
  23.         * Het aantal pagina's bepalen aan de hand van het totale aantal records en het aantal items per pagina.
  24.         */
  25.         function getAantalPaginas()
  26.         {
  27.                
  28.                 return ceil($this->totaalAantalRecords / $this->aantalRecordsPerPagina);
  29.                
  30.         }
  31.        
  32.         /*
  33.         * Het nummer van de eerste record op de huidige pagina bepalen.
  34.         */
  35.         function getLimit()
  36.         {
  37.                
  38.                 // Aangezien MySQL vanaf 0 telt en onze eerste pagina 1 is, moeten we 1 pagina van het totaal aftrekken.
  39.                 return ($this->huidigePagina * $this->aantalRecordsPerPagina) - $this->aantalRecordsPerPagina;
  40.                
  41.         }
  42.        
  43.         /*
  44.         * Het aantal records dat op elke pagina weergeven wordt, bepalen.
  45.         */
  46.         function getAantalRecordsPerPagina()
  47.         {
  48.                
  49.                 return $this->aantalRecordsPerPagina;
  50.                
  51.         }
  52.        
  53.         /*
  54.         * Lijst van alle beschikare pagina's genereren.
  55.         */
  56.         function getPaginaLijst()
  57.         {
  58.                
  59.                 // Variabele initialiseren.
  60.                 $paginaLijst = "";
  61.                
  62.                 // Alle pagina's doorlopen.
  63.                 for ($i=0; $i<$this->getAantalPaginas();$i++)
  64.                         // De lijst met pagina's aanvullen, waarbij we elke waarde verhogen met 1 omdat MySQL intern telt vanaf 0.
  65.                         $paginaLijst .= '<a href="?pagina='.($i + 1).'">'.($i + 1).'</a> ';
  66.                
  67.                 // Het lijstje van alle pagina's teruggeven.
  68.                 return $paginaLijst;
  69.                
  70.         }
  71.        
  72. }
  73.  
  74. ?>
  75.  


Miscchien kunnen jullie mij helpen met de fout eruit te halen.

Een voorbeeldje hoe het eruit ziet:
http://www.potterdigitaal.nl/ledenlijst.php
Thomas cp Verburg
^ Reactie #1 geschreven door Martijn op zaterdag 16 februari 2008 om 19:36:34.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Wat is de waarde van $paginaNummer? Is dat inderdaad 2 op de tweede pagina?
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #2 geschreven door Thootje op zaterdag 16 februari 2008 om 22:13:59.
Thootje heeft nog geen avatar toegevoegd
Multiviteit: 51
Ja als er op de eerste pagina er meer dan 25 zijn dan maakt hij de tweede pagina aan maar hij telt door. Dus hij weergeeft ze allemaal op de beide pagina's.

Als je op de link klikt die ik erbij heb ingesloten, in de topic, zie je van de pagina's.
Thomas cp Verburg
^ Reactie #3 geschreven door Martijn op zaterdag 16 februari 2008 om 23:47:32.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Ik zie (en zag daarstraks) de pagina inderdaad verspringen, maar ik kan in je logica geen fout vinden. Kijk dus eens na of effectief de waarde die je via $_GET doorgeeft gebruikt wordt en niet de standaardwaarde 1 dus. Gewoon de waarde even snel "quick and dirty" outputten zou voldoende moeten zijn om dit te verifiŽren ;).
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #4 geschreven door Thootje op zondag 17 februari 2008 om 10:49:41.
Thootje heeft nog geen avatar toegevoegd
Multiviteit: 51
Oke ik snap het even niet meer. die functie $_GET aan het begin checkt of het een pagina is. Wat moet ik daaraan dan verifiŽren?
Thomas cp Verburg
^ Reactie #5 geschreven door Martijn op zondag 17 februari 2008 om 11:54:05.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Aangezien je op twee pagina's hetzelfde resultaat krijgt, moet je dus eerst even controleren waar het net fout loopt. Onder het if-statement dat het paginanummer opvraagt, zet je even kortweg: echo $paginaNummer. Zo weet je of de fout in de paginaNummering class (waar ik niet meteen iets verkeerd opmerk) zit of bij het opvragen van de paginanummer.
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #6 geschreven door Thootje op zondag 17 februari 2008 om 15:45:29.
Thootje heeft nog geen avatar toegevoegd
Multiviteit: 51
als ik na het stukje

PHP
  1. echo $paginaNummering->getPaginaLijst();


Die echo plaatst komt er Object te staan.

Is dit wat je bedoelt of iets anders?
Thomas cp Verburg
^ Reactie #7 geschreven door Martijn op zondag 17 februari 2008 om 17:10:10.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
neen, echo $paginaNummer :).
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #8 geschreven door Thootje op zondag 17 februari 2008 om 19:51:28.
Thootje heeft nog geen avatar toegevoegd
Multiviteit: 51
Maar ik heb na dat stukje script de echo $paginaNummer toegevoegd maar er komt dan Object te staan.
Thomas cp Verburg
^ Reactie #9 geschreven door Martijn op zondag 17 februari 2008 om 20:21:29.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
volgens mij heb je $paginaNummering laten printen in plaats van $paginaNummer.
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #10 geschreven door Thootje op maandag 18 februari 2008 om 16:37:28.
Thootje heeft nog geen avatar toegevoegd
Multiviteit: 51
Ooh ja dat was het punt.

Ik heb nu wel de goeie echo geplaatst en nu verschijnt er gewoon een 1. (als paginanummer)
Thomas cp Verburg
^ Reactie #11 geschreven door Martijn op maandag 18 februari 2008 om 17:34:05.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Voila, nu weten we dus dat de juiste pagina doorgegeven wordt (op pagina 1 staat 1 en op pagina 2 staat 2).

Kijk nu eens na welke queries uitgevoerd worden op de database (print het SQL statement even snel bij het uitvoeren); is dat tweemaal dezelfde?

Met vriendelijke groeten,
Martijn Wouters
^ Reactie #12 geschreven door Thootje op maandag 18 februari 2008 om 18:26:31.
Thootje heeft nog geen avatar toegevoegd
Multiviteit: 51
Volgens mij begrijp je het niet echt. Ik heb 31 rijen in de ledentabel. Per pagina komen er 25 rijen. Die zijn er en toen er de 26e kwam verscheen de tweede pagina alleen telde hij op de eerste en tweede door. Ik heb nu 31 rijen en op iedere pagina staan dus 31 rijen. Ik heb nu die echo geplaatst. Wat hij dus laat zien is dat er maar 1 pagina is. Terwijl er dus 2 pagina's horen te zijn. Die $paginaNummer moet dus de fout zijn maar ik zie niet aan wat.
Thomas cp Verburg
^ Reactie #13 geschreven door Martijn op maandag 18 februari 2008 om 18:30:57.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Wel, vandaar dat ik zeg dat je je query eens moet uitprinten :).

Als je daar opmerkt dat er twee keer dezelfde query richting de database wordt gestuurd, weet je dat het fout zit bij het invoegen van de limit-data. Wanneer een van de twee variabelen in je limit-statement foutief zou zijn, zou je query (doorgaans) niet draaien en zou je dus geen resultaten terugkrijgen.
Met vriendelijke groeten,
Martijn Wouters
  • Pagina
  • 1 van 1

Snel-antwoordformulier
Toon uitgebreid antwoordformulier Bericht nalezen Bericht plaatsen