[PHP/MySQL] Pagination probleempje

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • D34F
  • Registratie: September 2007
  • Laatst online: 19-06-2024
Dag Tweakers,

ik ben bezig met een soort van image gallery waarbij ik per pagina twee rijen van drie plaatjes wil hebben en wanneer er dus meer dan 6 plaatjes zijn er onderaan een pagination komt zodat je naar de volgende pagina kan waar de volgende zes plaatjes staan. Nu is de pagination zelf geen probleem en de rijen van drie ook niet, het samenvoegen echter wel. Het lukt mij alleen om OF alle plaatjes op één pagina te hebben (zonder pagination dus) en dat in rijen van drie, OF met pagination maar dan wordt het één rij met de plaatjes onder elkaar.

De volgende code werkt voor het eerste ( alle plaatjes op één pagina in rijen van drie, zonder pagination):

PHP:
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
if(!isset($cmd)) 
{
    
    $result2 = mysql_query("select * from afbeelding");
$totaal = mysql_num_rows($result2);

for ($i=0;  $i<=$totaal; $i+=3) {
$result = mysql_query("select * from afbeelding WHERE active=\"yes\" LIMIT $i, 3");

   
   echo "<table width='100%'>";
   echo "<tr>";     
   while($r=mysql_fetch_array($result))
           { 
           $nummer=$r["nummer"];
           $string=$artist=$r["artist"];
           $string = str_replace(" ","_",$string);
           $description=$r["description"];
           $afbeelding=$r["afbeelding"];
                            
           echo "<td width='33%' valign='top' align='left'>";
           echo "<font face='verdana' size='3'color='white'>
           <a href='website/prints-item/$nummer/";
           echo "$string";
           echo "/'><IMG border='0' SRC=\"phpthumb/phpThumb.php?src=website/imageupload/$afbeelding?ws=173&hs=200=wmi\" ></a> <br> <font size=\"1.5pt\">$artist</font>";
           echo "<br><br></td>";           
           } 
    echo "</tr>";   
    echo "</table>";  
}


Deze code werkt voor het laatste (met pagination maar dan wordt het één rij met de plaatjes onder elkaar):

PHP:
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
// how many rows to show per page
$rowsPerPage = 6;

// by default we show first page
$pageNum = 1;

// if $_GET['page'] defined, use it as page number
if(isset($_GET['page']))
{
    $pageNum = $_GET['page'];
}

// counting the offset
$offset = ($pageNum - 1) * $rowsPerPage;

//toon content
   $result = mysql_query("SELECT * FROM afbeelding WHERE active='yes' order by nummer LIMIT $offset, $rowsPerPage"); 
   
   while($r=mysql_fetch_array($result)) 
   { 
      //toon titel en nummer
      $nummer=$r["nummer"];//toon nummer
      $artist=$r["artist"];
      $patterns[0] = '/ /';
      $patterns[1] = '/ /';
      $patterns[2] = '/ /';
      $replacements[2] = '-';
      $replacements[1] = '-';
      $replacements[0] = '-';
      $description=$r["description"];//toon omschrijving
      $description = wordwrap($description, 70, "<BR />");
      $signed=$r["signed"];//toon omschrijving
      $state=$r["state"];//toon omschrijving
      $price=$r["price"];//toon omschrijving
      $afbeelding=$r["afbeelding"];//toon omschrijving
      
      echo "<table><tr><td width=250>";
           //image item
      echo "<a href='website/prints-item/$nummer/";
      echo preg_replace($patterns, $replacements, $artist); 
      echo "/'><img border='0' class='maxwidth' alt='Click on this image for a bigger size' src=\"phpThumb_1.7.8/phpThumb.php?src=website/imageupload/$afbeelding?ws=100&hs=100=wmi";
      echo "\"></a>";
      echo "<br>";
      echo "</td>";
      echo "<td valign=top><font color='e7e7e8'>$artist</font><font face='times new roman' size='3'><br><a href='website/prints-item/$nummer/";
      echo preg_replace($patterns, $replacements, $artist); 
      echo "/'><font size='2'>More details</font></a></td></tr>";
      echo "</table><br>";
      
    }
    
  
}


// how many rows we have in database
$query   = "SELECT COUNT(nummer) AS numrows FROM afbeelding WHERE active='yes'";
$result  = mysql_query($query) or die('Error, query failed');
$row     = mysql_fetch_array($result, MYSQL_ASSOC);
$numrows = $row['numrows'];

// how many pages we have when using paging?
$maxPage = ceil($numrows/$rowsPerPage);

$self = "website/prints";

// creating 'previous' and 'next' link
// plus 'first page' and 'last page' link

// print 'previous' link only if we're not
// on page one
if ($pageNum > 1)
{
    $page = $pageNum - 1;
    $prev = " <a href=\"$self?page=$page\">[Prev]</a> ";
    
    $first = " <a href=\"$self?page=1\">[First Page]</a> ";
} 
else
{
    $prev  = ' [Prev] ';       // we're on page one, don't enable 'previous' link
    $first = ' [First Page] '; // nor 'first page' link
}

// print 'next' link only if we're not
// on the last page
if ($pageNum < $maxPage)
{
    $page = $pageNum + 1;
    $next = " <a href=\"$self?page=$page\">[Next]</a> ";
    
    $last = " <a href=\"$self?page=$maxPage\">[Last Page]</a> ";
} 
else
{
    $next = ' [Next] ';      // we're on the last page, don't enable 'next' link
    $last = ' [Last Page] '; // nor 'last page' link
}

// print the page navigation link
echo "<center> $first  $prev  <font color='e7e7e8'>Showing page <strong><font color='#ed1d25'>$pageNum</font></strong>of <strong>$maxPage</strong> pages</font>  $next  $last</center>" ;


Ik vind verschillende pagination tutorials maar die werken allemaal zoals bovenstaande en ik weet dus niet hoe ik de optie kan hebben om én pagination te hebben én dat er per pagina maar zes plaatjes getoond worden in twee rijen van drie plaatjes. Simpelweg drie tables maken werkt ook niet, dan krijg ik namelijk drie dezelfde plaatjes te zien.

Bij voorbaat dank voor jullie hulp.

Groetjes,

Peter

Acties:
  • 0 Henk 'm!

  • Flipke84
  • Registratie: Juli 2008
  • Laatst online: 09-11-2024
Wat doet de accolade op regel 53

Acties:
  • 0 Henk 'm!

  • D34F
  • Registratie: September 2007
  • Laatst online: 19-06-2024
Die hoort nog bij die eerste code (ik gebruik nu namelijk die eerste code en de tweede heb ik uitgequote). Maakt verder niets uit.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ik denk dat je toch wat meer moet debuggen, of specifieker moet zijn wat je probleem is. Je kunt niet verwachten dat je hier een lap code neergooit en je de oplossing aangedragen krijgt.

Schrijf eens gewoon op papier op wat je code doet, en waarom het niet doet wat jij wilt.

Je eerste stuk code is aardig vreemd.

Je selecteerd eerst alle rijen uit een tabel alleen om te kijken hoeveel het er zijn, en daarna ga je die in stapjes van 3 opnieuw uit de database halen, en printen.

Bij de tweede haal je $rowsPerPage items uit je database en print je die na elkaar.

De code doet niks vreemds, dus ik zou nog eens goed voor je zelf kijken wat je precies wilt doen en op welke manier. Als je voor jezelf goed in je hoofd hebt welke stappen je moet nemen kun je beginnen met programmeren.

Verder wil ik je nog wijzen op: Wij tweakers doen elkaar permanent de groeten

[ Voor 5% gewijzigd door Woy op 18-02-2009 11:45 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

PHP:
1
2
    $result2 = mysql_query("select * from afbeelding");
$totaal = mysql_num_rows($result2);

Misschien is het handig om eens te kijken naar de SQL functie COUNT. Ik hoop dat je begrijpt dat je met deze twee regels code de volledige inhoud van die tabel eerst php inhengelt om vervolgens enkel te tellen hoeveel resultaten je nu eigenlijk hebt.

Wat het vervolgens nog extra inefficient maakt is dat je daarna nog een keer een subset van de gegevens ophaalt. Eigenlijk haal je dus alle afbeeldingen + 3 dubbel op.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • winkbrace
  • Registratie: Augustus 2008
  • Laatst online: 24-08 15:17
Zou zoiets in je tweede code de truuk niet doen?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
echo "<table><tr>";
$teller = 1;
while($r=mysql_fetch_array($result)) 
{ 
    if ($teller % 3 == 0)
        echo "</tr><tr>";
        
    echo "<td>".$r['waarden']."</td>";
    
    $teller++;
}
echo "</tr></table>";

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 20:57

MueR

Admin Tweakers Discord

is niet lief

Dus, na het volgen van deze tutorial is het je niet gelukt?
PHP:
1
if (++$i % 3 == 0) print 'einde regel, nieuwe beginnen';

offtopic:
Dude, <font> ? :X

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • D34F
  • Registratie: September 2007
  • Laatst online: 19-06-2024
Bedankt voor jullie commentaar. De volgende werkt iig voor mij:
MueR schreef op woensdag 18 februari 2009 @ 12:34:
Dus, na het volgen van deze tutorial is het je niet gelukt?
PHP:
1
if (++$i % 3 == 0) print 'einde regel, nieuwe beginnen';

offtopic:
Dude, <font> ? :X
Met deze code krijg ik een rij van drie images en werkt ook de pagination. Echter, ik wil dus graag per pagina twee rijen van 3 plaatjes. Alleen heb ik nu als ik bijv. $rowsPerPage aanpas dat alle plaatjes verdwijnen. 8)7 Wat doe ik verkeerd? Of hoe pas ik het goed aan.

[edit]

Werkt nog niet helemaal, blijkbaar laat hij niet alle afbeeldingen zien :o

[ Voor 5% gewijzigd door D34F op 18-02-2009 12:55 ]


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 20:57

MueR

Admin Tweakers Discord

is niet lief

Dan zul je eens wat moeten gaan experimenteren he? Je code is een grote teringbende (scuse ze frensjh) en je moet duidelijk nog wat basisbeginselen onder de knie krijgen. Begin eens met een vaste set van waarden (stuk of 10) en ga daarmee ene paging systeem maken.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Inderdaad, bedenk eerst eens goed voor jezelf welke ( HTML ) output je wilt hebben, en hoe je dat voor elkaar denkt te krijgen.

Probeer het dan eens uit te voeren met een array met 10 elementen. Als je dat snapt ga je eens proberen om de items uit de database te krijgen.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • D34F
  • Registratie: September 2007
  • Laatst online: 19-06-2024
Het is mij nu gelukt met de volgende code:

PHP:
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
<?PHP 
// Copyright Browsy.net
// Gamaakt door Jeroen van Browsy.net
// Bij gebruik van dit script deze tekst laten staan. 
if(empty($n)){$n = "1";} 
$aantalperpagina = "6"; 
$aantal = $aantalperpagina - 1; 
$begin = $n + 0; 
$eind = $begin + $aantal; 
$query="SELECT * FROM afbeelding WHERE active=\"yes\" ORDER BY nummer"; //aanpassen 
  $sql=mysql_query($query) or die (mysql_error()); 

  echo "<table>";
  
  while ($obj=mysql_fetch_object($sql)) { 
    $x++; 
    if($x <= $eind && $x >= $begin){ 
        
        if($i==0){
            echo "<tr>";
        }
        $i++;
        $afbeelding=$obj->afbeelding;
        $nummer=$obj->nummer;
        $description=$obj->description;
        $artist=$obj->artist;
        $string=$artist;
        $string = str_replace(" ","_",$string);
        
        
        echo"<td width='33%' valign='top' align='left'><font face='verdana' size='3'color='white'>
           <a href='http://website.nl/prints-item/$nummer/$string/'><IMG border='0' SRC=\"phpthumb/phpThumb.php?src=http://website.nl/imageupload/$afbeelding?ws=173&hs=200=wmi\" ></a> <br><br> <font size=\"1.5pt\">$artist</font><br><br><br></td>"; //aanpassen
        
        if($i==3){
            echo "</tr>";
            $i = 0;
        }
    }
    
  }
  if($i!=0){echo "</tr>";}
echo "</table>";

$volgende = $begin + $aantalperpagina; 
$vorige = $begin - $aantalperpagina; 
//Hier de navigatie 
if($n == "1"){echo"<FONT COLOR=#C0C0C0 SIZE=2>Previous page</FONT>";}else{echo"<FONT COLOR=#000000 SIZE=2><a href='prints.php?n=$vorige'>Previous page</a></FONT >";} 
echo"<FONT COLOR=#000000 SIZE=2> || </font>"; 
if($n + $aantal >= $x){echo"<FONT COLOR=#C0C0C0 SIZE=2>Next page</FONT>";}else{echo"<FONT COLOR=#000000 SIZE=2><a href='prints.php?n=$volgende'>Next page</a></ FONT>";} 
?>

Acties:
  • 0 Henk 'm!

  • TheGrandWazoo
  • Registratie: Januari 2009
  • Laatst online: 20:24
En snap je ook wat het doet of neem je het gewoon 1 op 1 over?

Acties:
  • 0 Henk 'm!

  • Flipke84
  • Registratie: Juli 2008
  • Laatst online: 09-11-2024
Ook zie ik het nut niet echt van deze regel:
PHP:
1
$begin = $n + 0;


Wat doet die +0?

[ Voor 11% gewijzigd door Flipke84 op 18-02-2009 14:24 ]


Acties:
  • 0 Henk 'm!

  • TheGrandWazoo
  • Registratie: Januari 2009
  • Laatst online: 20:24
Flipke84 schreef op woensdag 18 februari 2009 @ 14:24:
Ook zie ik het nut niet echt van deze regel:
PHP:
1
$begin = $n + 0;


Wat doet die +0?
Als je dan toch bezig bent: waarom wordt het aantal pagina's opgeslagen als een String en gebruikt als een Integer?
Pagina: 1