Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

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

Anoniem
Jakobvk
6 antwoorden
  • [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.
  • 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 ^_^
  • 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 :)
  • 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"
  • geweldig, ontzettend bedankt.
  • 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.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.