[PHP] probleem met foreach

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ilovetechno
  • Registratie: Oktober 2001
  • Laatst online: 17:06
Ik heb een script dat mijn foto's weergeeft. Nu heb ik redelijk wat foto's en wil dus meerderepagina te hebben. Dit is gelukt. Echter gaat het hier niet goed. Wat doe ik fout? op iedere pagina heb ik dezelfde output..
Code waar het foutgaat:

PHP:
1
2
3
4
5
6
for($i=0; $i<$aantal2; $i++){ 
      while($data=mysql_fetch_array($sql2)){ 

        foreach ($data as $item){
            echo $item; echo "<BR>";}}
}

Volledige 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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<? 
require"verbinding2.php"; 
$pagina =isset($_GET["pagina"]);
if(!$pagina){ 
    $pagina=1; 
} 


$sql=mysql_query("SELECT filename FROM fotos")or die("Het selecteren van alle berichten is niet gelukt.Mysql retourneerde: ".mysql_error()); 
$aantal=mysql_num_rows($sql); 

$tot=10;   
$van=($pagina*$tot)-$tot; 


$sql2=mysql_query("SELECT filename FROM fotos LIMIT $van,$tot")or die("Het selecteren van de berichten is niet gelukt. Mysql retourneerde: ".mysql_error()); 
$aantal2=mysql_num_rows($sql2); 
?>
<link rel="stylesheet" href='css/hoverbox.css' type="text/css" media="screen, projection"  />
<link rel="stylesheet" href='css/ie_fixes.css' type="text/css" media="screen, projection" />
<div class="linkermenu">
 <div class="hd"><div class="c"></div></div>
 <div class="bd">
  <div class="c">
   <div class="s" align="center">
   <h1>Supersized</h1>
<?php
echo '<ul class="hoverbox">';
    $count = 0;
    
for($i=0; $i<$aantal2; $i++){ 
      while($data=mysql_fetch_array($sql2)){ 

        foreach ($data as $item){
            echo $item; echo "<BR>";}}
} 
?>

 </ul>
  </li>
  <br><br><br><br><br>
  <?php
  
$aantal3=ceil($aantal/$tot); 

if($aantal3<>'1'){ 
    if($pagina<>'1'){ 
    $pagina2=$pagina-1; 
    print("<A href=\"index.php?p=modules/photo/weergeven&pagina=$pagina2\">vorige</A>&nbsp;"); 
    } 
    for($j=0; $j<$aantal3; $j++){ 
    $k=$j+1; 
    print("[<A href=\"index.php?p=modules/photo/weergeven&pagina=$k\">$k</A>] "); 
    } 
    if($pagina<>$aantal3){ 
    $pagina3=$pagina+1; 
    print("<A href=\"index.php?p=modules/photo/weergeven&pagina=$pagina3\">volgende</A>"); 
    } 
} 
?> 
  
  
  
  
   </div>
  </div>
 </div>
 <div class="ft"><div class="c"></div></div>
</div>
<br>

Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
't Hele idee van die while-loop bij mysql_fetch_array is juist om alle rows uit te lezen, je bent dus dubbelop bezig met je mysql_num_rows en de for-loop die je erbij gemaakt hebt.

Acties:
  • 0 Henk 'm!

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 18-09 12:47

killercow

eth0

idd,

gewoon met je while loop door de records lopen, je hebt dan toch een array van alle velden? (data bevat dan alle veldjes), $data['filename'] je filename.

En je css class names zijn echt Super niet duidelijk (maar das een andere probleem), class names werken handiger als je ze omschrijvend maakt naar de content die ze beslaan. (dus niet een kleur of positie, maar gewoon content, header, copyright)

openkat.nl al gezien?


Acties:
  • 0 Henk 'm!

  • ilovetechno
  • Registratie: Oktober 2001
  • Laatst online: 17:06
killercow schreef op donderdag 12 oktober 2006 @ 20:12:
idd,

gewoon met je while loop door de records lopen, je hebt dan toch een array van alle velden? (data bevat dan alle veldjes), $data['filename'] je filename.

En je css class names zijn echt Super niet duidelijk (maar das een andere probleem), class names werken handiger als je ze omschrijvend maakt naar de content die ze beslaan. (dus niet een kleur of positie, maar gewoon content, header, copyright)
De CCS classes zijn inderdaad wat onduidelijk. Dit ben ik met je eens. Hier kijk ik later nog naar.

wat betreft de code.. Ik heb deze gewijzigd in:

PHP:
1
2
3
4
5
6
7
for($i=0; $i<$aantal2; $i++){ 
      while($data=mysql_fetch_array($sql2)){ 

        
            echo $data['filename']; echo "<BR>";}
} 
?>


Ik krijg helaas dezelfde output op het scherm.. 8)7 Als ik naar pagina 2 ga zie ik wederom dezelfde resultaten als op pagina.

Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
Volgens mij stel je $pagina niet in? Moet zoiets zijn:

PHP:
1
$pagina = isset($_GET["pagina"]) ? $_GET['pagina'] : 1;


In deze code:
PHP:
1
2
3
4
$pagina =isset($_GET["pagina"]);
if(!$pagina){ 
    $pagina=1; 
}

Zal $pagina 1 of true zijn. Waarschijnlijk word die true naar een 1 omgezet, zodat je idd altijd op pagina 1 zit. :)

[ Voor 48% gewijzigd door user109731 op 12-10-2006 20:29 ]


Acties:
  • 0 Henk 'm!

  • Technicality
  • Registratie: Juni 2004
  • Laatst online: 13:07

Technicality

Vliegt rechtsom...

Ik doe het altijd zo:
PHP:
1
2
3
4
5
6
7
$sql2="SELECT filename FROM fotos LIMIT $van,$tot";
$result=mysql_query($sql2);
while ($row= mysql_fetch_array($result));
 {
  echo $data['filename']; 
  echo "<BR>";
 }

Acties:
  • 0 Henk 'm!

Verwijderd

Druk de waarde van $sql2 eens af, daar gaat dus iets fout... Beetje debuggen kan geen kwaad :)

En een for-loop EN een while-loop :? Lijkt me niet dat dit goed werkt 8)7

En inderdaad, $pagina wordt altijd 1...

[ Voor 40% gewijzigd door Verwijderd op 12-10-2006 20:31 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Ik zie zo snel de fout nog niet, misschien is het een idee om eens wat debug info toe te voegen. Druk bijvoorbeeld eens de waarde va pagina die je binnen krijgt af om te zien of deze klopt.

Die gewijzigde code is nog steeds onzin. Je hebt een lus in een lus. De while gaat alle resultaten bij langs (hij gaat immers door tot er geen resultaten zijn en fetch_array false opleverd) en vervolgens probeer je nog 9 keer die while lus te draaien (waarbij niks gebeurd omdat de recordset al aan het einde is). Verder doe je het tellen van het totaal aantal foto's onnodig zwaar. Je bent een complete resultset aan het op bouwen om vervolgens alleen te vragen hoeveel rows je terug krijgt. Dat kan onnoemelijk veel efficienter wanneer je gewoon een count in je query gebruikt. Je resultset bestaad dan immers maar uit 1 record met 1 kolom.


@hieronder: Dat zeg ik toch? Ik zie niet in wat het nut is van die 4 woorden met een smiley erachter.

[ Voor 6% gewijzigd door Janoz op 12-10-2006 20:39 ]

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!

  • Technicality
  • Registratie: Juni 2004
  • Laatst online: 13:07

Technicality

Vliegt rechtsom...

Janoz schreef op donderdag 12 oktober 2006 @ 20:31:
Je bent een complete resultset aan het op bouwen om vervolgens alleen te vragen hoeveel rows je terug krijgt. Dat kan onnoemelijk veel efficienter wanneer je gewoon een count in je query gebruikt. Je resultset bestaad dan immers maar uit 1 record met 1 kolom.
oftewel SELECT COUNT etc ;)

Acties:
  • 0 Henk 'm!

  • ilovetechno
  • Registratie: Oktober 2001
  • Laatst online: 17:06
Grote prutser schreef op donderdag 12 oktober 2006 @ 20:26:
Volgens mij stel je $pagina niet in? Moet zoiets zijn:

PHP:
1
$pagina = isset($_GET["pagina"]) ? $_GET['pagina'] : 1;


In deze code:
PHP:
1
2
3
4
$pagina =isset($_GET["pagina"]);
if(!$pagina){ 
    $pagina=1; 
}

Zal $pagina 1 of true zijn. Waarschijnlijk word die true naar een 1 omgezet, zodat je idd altijd op pagina 1 zit. :)
Helemaal top! Dom van mijzelf.

Nu werkt het zoals gewenst.
Ik zal hier eens aandacht aa schenken.

Bedankt!
Pagina: 1