login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Smarty loop probleem

Offline bas_vdl - 06/04/2006 18:04 (laatste wijziging 07/04/2006 22:17)
Avatar van bas_vdlNieuw lid ik heb een tabel met de landen
id_land, land

ik heb een tabel met groepsnummers
id_groep, groep

nu wil ik graag een netjes overzicht maken met dde de groepsletter en vervolgens de landen oftewel

A
Duitsland
Polen
Ecuador
Costa Rica

B
enz.
enz.
enz.
enz.

dit wil ik allemaal gaan doen met smarty templates en ik was al een aardig stukje op weg

de werkwijze is als volgt

met een query haal ik alles uit de tabel groepen_tbl

die laat ik loopen en bij de eerste loop laat ik de query lopen om de landen te selecteren die bij dat groep_id horen

netjes afdrukken en klaar

ik heb het volgende script

  1. <?php
  2.  
  3. require("includes/config.php");
  4. require("includes/includes.php");
  5.  
  6. $dataGroep = array();
  7. $dataLand = array();
  8. $i = 0;
  9. $j = 0;
  10.  
  11. $groepen = $db->query("SELECT * FROM groepen_tbl ORDER BY groep ASC");
  12. while($rowGroep = $db->fetchRow($groepen, "ASSOC"))
  13. {
  14. foreach($rowGroep AS $indexGroep => $valueGroep)
  15. {
  16. $dataGroep[$i][$indexGroep] = htmlentities($valueGroep);
  17. }
  18.  
  19. //$landen = $db->query("SELECT * FROM landen_tbl WHERE groep_id = ". $dataGroep[$i]['id_groep']);
  20. //echo "SELECT * FROM landen_tbl WHERE groep_id = ". $dataGroep[$i]['id_groep'] ."<br>";
  21.  
  22. echo "<pre>";
  23. print_r ($rowGroep);
  24. echo "</pre>";
  25.  
  26. $landen = $db->query("SELECT * FROM landen_tbl WHERE groep_id = ". $rowGroep['id_groep']);
  27. echo "SELECT * FROM landen_tbl WHERE groep_id = ". $rowGroep['id_groep'] ."<br>";
  28.  
  29. while($rowLand = $db->fetchRow($landen, "ASSOC"))
  30. {
  31. foreach($rowLand AS $indexLand => $valueLand)
  32. {
  33. $dataLand[$j][$indexLand] = htmlentities($valueLand);
  34. }
  35.  
  36. $j++;
  37.  
  38. }
  39.  
  40. $i++;
  41.  
  42. }
  43.  
  44. $tpl->assign("dataGroep", $dataGroep);
  45. $tpl->assign("dataLand", $dataLand);
  46. $tpl->display("LandenOverzicht.html");
  47.  
  48. ?>


en

  1. <!-- {include file="page_header.html"} -->
  2. {debug}
  3.  
  4. {section name=groep loop=$dataGroep}
  5. {$dataGroep[groep].groep}
  6. <br>
  7. {section name=land loop=$dataLand[groep]}
  8. {$dataLand[land].land}
  9. <br>
  10. {/section}
  11. <br>
  12. {/section}
  13.  
  14. <!-- {include file="page_footer.html"} -->


dit geeft als output:
http://www.plaatscode.be/dump-794.txt

oftewel hij loopt maar 1 keer en dan is het klaar

weet iemand wat hier fout gaat

alvast bedankt!!!

6 antwoorden

Gesponsorde links
Offline kokx - 06/04/2006 20:10
Avatar van kokx Onbekend Laat je db class eens zien.
Offline bas_vdl - 06/04/2006 22:11 (laatste wijziging 06/04/2006 22:28)
Avatar van bas_vdl Nieuw lid als ik het volgende weg haal dan staat er wel netjes
A B C D E F G H

  1. $db->query("SELECT * FROM landen_tbl WHERE groep_id = ". $dataGroep[$i]['id_groep'] ."");
  2.  
  3. echo "SELECT * FROM landen_tbl WHERE groep_id = ". $dataGroep[$i]['id_groep'] ."<br>";
  4.  
  5. while($rowLand = $db->fetchRow())
  6. {
  7. foreach($rowLand AS $indexLand => $valueLand)
  8. {
  9. $dataLand[$j][$indexLand] = htmlentities($valueLand);
  10. }
  11.  
  12. $j++;
  13.  
  14. }


##########

DB CLASS:
http://www.pastebin.be/dump-772.txt

Offline Rens - 06/04/2006 22:47
Avatar van Rens Gouden medaille

Crew algemeen
Regel 11, 12 en 13:
  1. $db->query("SELECT * FROM groepen_tbl ORDER BY groep ASC");
  2. while($rowGroep = $db->fetchRow())
  3. {


Probeer zo eens:
  1. $result = $db->query("SELECT * FROM groepen_tbl ORDER BY groep ASC");
  2. while($rowGroep = $db->fetchRow($result, "ASSOC"))
  3. {


Denk dat, om de een of andere reden, je resultaat niet het volledige resultaat bevat o.i.d.
Offline bas_vdl - 06/04/2006 23:06 (laatste wijziging 06/04/2006 23:48)
Avatar van bas_vdl Nieuw lid de huidige code staat nu weer inde de eerste post er zijnwat kleine wijzigingen

de outpu is nu:
SELECT * FROM landen_tbl WHERE groep_id = 1
SELECT * FROM landen_tbl WHERE groep_id = 2
SELECT * FROM landen_tbl WHERE groep_id = 3
SELECT * FROM landen_tbl WHERE groep_id = 4
SELECT * FROM landen_tbl WHERE groep_id = 5
SELECT * FROM landen_tbl WHERE groep_id = 6
SELECT * FROM landen_tbl WHERE groep_id = 7
SELECT * FROM landen_tbl WHERE groep_id = 8

A
Duitsland
Polen
Ecuador
Costa Rica
Engeland
Zweden
Paraguay

B
Duitsland
Polen
Ecuador
Costa Rica
Engeland
Zweden
Paraguay

C
enz.
enz.
Offline Rens - 07/04/2006 09:56 (laatste wijziging 07/04/2006 09:57)
Avatar van Rens Gouden medaille

Crew algemeen
  1. $groepen = $db->query("SELECT * FROM groepen_tbl ORDER BY groep ASC");
  2. while($rowGroep = $db->fetchRow($groepen, "ASSOC"))
  3. {
  4. $landen = $db->query("SELECT * FROM landen_tbl WHERE groep_id = ". $rowGroep['GROEPID']);
  5. echo "SELECT * FROM landen_tbl WHERE groep_id = ". $rowGroep['GROEPID'] ."<br>";
  6. while($rowLand = $db->fetchRow($landen, "ASSOC"))
  7. {
  8. foreach($rowLand AS $indexLand => $valueLand)
  9. {
  10. $dataLand[$j][$indexLand] = htmlentities($valueLand);
  11. }
  12.  
  13. $j++;
  14.  
  15. }
  16.  
  17. $i++;
  18.  
  19. }


Regel 4 en 5, daar staat in hoofdletters "GROEPID".
Die moet je even vervangen door de naam die jouw kolom groepid heeft.
Offline bas_vdl - 07/04/2006 17:35 (laatste wijziging 07/04/2006 22:18)
Avatar van bas_vdl Nieuw lid helaas dat geeft het zelfde resultaat

originele post is weer up-to-date qua script en output
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.219s