Ga naar inhoud

[PHP] tabel genereren d.m.v. PHP


anoniem

Aanbevolen berichten

[code:1:91834f46ff] tabel in database: +-----+---------+----------+-----------+--------+ | ID | childID | parentID | name | period | +-----+---------+----------+-----------+--------+ | 101 | 1 | 125 | opdracht1 | herfst | | 102 | 2 | 125 | opdracht2 | herfst | | 102 | 3 | 125 | opdracht3 | herfst | | 103 | 4 | 125 | opdracht1 | lente | | 104 | 5 | 125 | opdracht1 | winter | | 105 | 6 | 125 | opdracht2 | winter | +-----+---------+----------+-----------+--------+ tabel in html: +-----------+-----------+-----------+-----------+ | herfst | winter | lente | zomer | +-----------+-----------+-----------+-----------+ | opdracht1 | opdracht1 | opdracht1 | | | opdracht2 | opdracht2 | | | | opdracht3 | | | | +-----------+-----------+-----------+-----------+ [/code:1:91834f46ff][b:91834f46ff]probleem:[/b:91834f46ff] Ik wil de tabel in de database omzetten naar een tabel in html volgens het voorbeeld hierboven, nu lijkt me dat niet zo'n probleem maar kom er zelf niet echt uit. [b:91834f46ff]oplossing:[/b:91834f46ff] Het lijkt mij het handigst om de waardes eerst in variabelen te plaatsen en daarna per rij te tonen. [code:1:91834f46ff]voorbeeld: <?php $var1 = "opdracht 1 <br /> opdracht 2 <br /> opdracht 3"; $var2 = "opdracht 1 <br /> opdracht 2"; $var3 = "opdracht 1"; ?> [/code:1:91834f46ff][code:1:91834f46ff] Ik zat zelf in deze richting te denken.. <?php $sql = mysql_query("SELECT * FROM tabel WHERE parentID = $menu_ID ORDER BY period") or die(mysql_error()); while($res = mysql_fetch_array($sql)) { // ?? } ?>[/code:1:91834f46ff]Ik hoop dat het geheel een beetje duidelijk is, kan iemand die me een kleine opzet kan geven hoe ik dit het beste voor elkaar kan krijgen, het geheel moet namelijk niet alleen voor de 4 jaargetijden werken maar ook wanneer ik bijv. 20 periodes (kolommen in html tabel) heb.
Link naar reactie
je wilt dus dat het ook werkt met 20 kolommen, waarbij de de periods niet iets uniek numrieks of wat dan ook hebben om ze makkelijk te identificeren? lastig, lijkt me makkelijkst om een extra tabel "periods" te maken met een 2 kolommen ID en naam, en in je tabel de "periods" vervangen door periodID waarin dus de ID van die period komt. als je tabel erg groot is, doe dat dan natuurlijk met queries. daarna kun je makkelijk met een FOR loop de queries maken. [code:1:59853584e7] for ($i = 1; $i <= 20; $i++) { $res = mysql_query("SELECT * FROM period WHERE periodID = \"$i\"") or die("blabla"); $row = mysql_fetch_array($res); $period = $row['period']; $sql = "SELECT * FROM tabel WHERE periodID = \"$period\""; etc etc. } [/code:1:59853584e7] maar misschien weet iemmand met meer SQL kennis dan ik wel een leuke exotische oplossing ^_^
Link naar reactie
in principe moet het geheel ook te gebruiken zijn voor een andere tabel met dezelfde opmaak, dus daar maak ik geen gebruik van perioden als "herfst winter etc" maar "1 2 3 etc" dus dat kan wel oplopen tot 100 als ik dat zou willen. je zou dan dus ook 100 kolommen moeten krijgen met iedere kolom zijn eigen bijbehorende waardes. Ik heb inmiddels wat maar het verdient zeker niet de schoonheidsprijs, daarnaast werkt het ook nog niet helemaal... [code:1:4d3350fdf2]<?php $sql = mysql_query("SELECT name, period FROM schoolwork WHERE parentID = $menu_ID ORDER BY period, name") or die(mysql_error()); $columns_array = array(); foreach($data as $row) { // variables $name, $period creeren extract($row); //-line 13 // $name in sub-array $period plaatsen $columns_array[$period][] = $name; } echo "<table border='1'><tr>"; foreach(array_keys($columns_array) as $key) { echo "<td>$key</td>"; } echo "</tr><tr>"; foreach($columns_array as $key => $arr) { echo "<td valign='top'>"; foreach($arr as $value) { echo $value ."<br />"; } echo "</td>"; } echo "</tr></table>"; ?> [/code:1:4d3350fdf2] Hoe krijg ik alle data in een nested associative array $data ?? Ik dacht dit $data = mysql_fetch_assoc($sql); maar dat werkt niet :)
Link naar reactie
wel omdat je zelf aangeeft dat je 123 etc gebruikt, waarom dan moeilijk doen als het (relatief) eenvoudig kan? ik ben zo vrij geweest even je voorbeeld tabel in mijn database in te voeren en heb hier een werkend script voor je ^_^ [code:1:5c05871f31] <?php //hier staat mijn verbinding met database in: include("req/db.php"); for ($i = 1; $i <= 3; $i++) { $res = mysql_query("SELECT * FROM schoolwork WHERE period = \"$i\"") or die(mysql_error()); while($row = mysql_fetch_assoc($res)) { $period = $row['period']; $data[$period] .= $row['name'] . "<br />"; } } //array netjes in een tabel weergeven print "<table border=\"3\">"; print "<tr>"; foreach($data as $period => $name) { print "<td>$period</td>"; } print "</tr><tr>"; foreach($data as $period => $name) { print "<td>$name</td>"; } print "</tr></table>"; //zo ziet de array eruit: print "<pre>"; print_r($data); print "</pre>"; ?> [/code:1:5c05871f31] en een print_r van $data: [code:1:5c05871f31] Array ( [1] => opdracht1 opdracht2 opdracht3 [2] => opdracht1 [3] => opdracht1 opdracht2 ) [/code:1:5c05871f31] nu is het enige wat je hoef te veranderen de FOR loop zodat ie de juiste hoeveelheid kolommen pakt die je wilt hebben. met een simpel IF blokje kun je dan nog bepaalde periods overslaan als je dat nodig is... resultaat kun je hier zien: http://cardamon.dyndns.org/schoolwork.php suc6! PS: heb herfst vervangen door "1", lente door "2" en winter door "3"
Link naar reactie
Je bent op de goede weg. Je maakt in je bovenste gedeelte van je code nog een paar foutjes. Als je het zo doet:[code:1:bf7c51bcff]$rs = mysql_query(" SELECT name, period FROM schoolwork WHERE parentID = $menu_ID ORDER BY period, name ") or die(mysql_error()); while ($row = mysql_fetch_assoc($rs)) { $columns_array[$row['period']][]=$name; } mysql_free_result($rs);[/code:1:bf7c51bcff] zou het moeten werken. Jakobvk, de manier zoals jij het doet kost te veel performance (te veel en onnodige queries naar de db). -Rémy p.s. Het best zou zijn om de database het te laten doen, maar hiervoor heb je stored procedures nodig, maar die heeft MySQL niet.
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...