Avatar billede exp Juniormester
09. juni 2016 - 12:11 Der er 7 kommentarer og
2 løsninger

Hjælp til dynamisk output af tabel, på baggrund af MySQL query

Halløjsovs - jeg har prøvet og prøvet, men kan simpelthen ikke knække nødden.

Så nu prøver jeg herinde :-)

Jeg prøver at lave en simpel function der, på baggrund af en MySQL query og en connection, kan output'e en simpel tabel med svaret fra query'en.

EKSEMPEL:
$sql = "SELECT * FROM `table`";

function mysql_output_result_table($sql,$conn) {
    // indsæt php-magi her...
}

echo mysql_output_result_table($sql,$conn)

OUTPUT:
<table>
    <thead>
        <tr>
            <th>Kolonne-navn A</th>
            <th>Kolonne-navn B</th>
            <th>Kolonne-navn ...</th>
            <th>Kolonne-navn Z</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Værdi 1A</td>
            <th>Værdi 1...</th>
            <td>Værdi 1Z</td>
        </tr>
        <tr>
            <td>Værdi 2A</td>
            <th>Værdi 2...</th>
            <td>Værdi 2Z</td>
        </tr>
        <tr>
            <td>Værdi 3A</td>
            <th>Værdi 3...</th>
            <td>Værdi 3Z</td>
        </tr>
        <tr>
            <td>etc...</td>
            <td>etc...</td>
            <td>etc...</td>
        </tr>
    </tbody>
</table>

Er der nogen der kan hjælpe mig på vej?


/exp
09. juni 2016 - 12:27 #1
Her er lidt til at få dig startet:

$result = mysql_query( $sql, $conn);

while ($row = mysql_fetch_assoc($result)) {
    echo $row['firstname'];
    echo $row['lastname'];
    echo $row['address'];
    echo $row['age'];
}
Avatar billede Slater Ekspert
09. juni 2016 - 12:28 #2
Skal det forstås sådan, at du ikke nødvendigvis kender antallet eller navnene på kolonnerne, og at de også skal hentes dynamisk fra mysql?
Avatar billede Slater Ekspert
09. juni 2016 - 12:46 #3
Hvis det skal være dynamisk, så er dette nok den simpleste måde at gøre det:
<?php

$db = new mysqli('localhost', 'root', 'password', 'test');

$rs = $db->query("select * from table");

$cols = null;
while ($row = $rs->fetch_assoc())
{
    if ( ! $cols)
    {
        $cols = array_keys($row);

        echo "<table>\n<thead>\n<tr>";
        foreach ($cols as $col)
        {
            echo "<th>$col</th>\n";
        }
        echo "</tr>\n<thead>\n<tbody>";
    }

    echo "<tr>\n";
    foreach ($cols as $col)
    {
        echo '<td>', $row[$col], "</td>\n";
    }
    echo "</tr>\n";
}

echo "</tbody>\n</table>";
Avatar billede exp Juniormester
09. juni 2016 - 13:04 #4
@slater,

yes, præcis. Det er til når jeg udvikler, og bare lige hurtigt skal tjekke et sql-kald, og ikke nødvendigvis har adgang til fx phpmyadmin el.lign.

/michael
Avatar billede exp Juniormester
09. juni 2016 - 13:09 #5
@slater,

fik lige testet dit bud, og det virker perfekt.

Tusind tak for hjælpen!! :-)


/michael
Avatar billede exp Juniormester
09. juni 2016 - 13:11 #6
@Maya Kathrine Andersen,

den slagne måde med at opliste hver enkelt kolonne manuelt kender jeg, men det jeg manglede var en løsning, der tænker for mig.

@slater's dynamiske løsning virker perfekt :-)
Avatar billede Slater Ekspert
09. juni 2016 - 13:15 #7
Hov, jeg ser lige at jeg kom til at starte <thead> tag'et to gange i stedet for at afslutte det anden gang. Gør ikke nogen visuel forskel nu, men hvis du putter CSS på, kan det forstyrre noget.

Men godt du er tilfreds.
Avatar billede exp Juniormester
09. juni 2016 - 15:00 #8
Arh yes, den fandt jeg også selv, fik bare ikke lige nævnt det herinde :-)
Avatar billede arne_v Ekspert
05. juli 2016 - 03:51 #9
Gammelt spoergsmaal mne lige en kommentar.

Det er ikke noedvendigt at bruge tricket med at hente associativt array og saa bruge speciel nehandling for foerste raekke.

mysqli har en metode beregnet til at hente felt navne ud.

Demo:


function dump($rs) {
    echo "<table>\r\n";   
    echo "<tr>\r\n";
    foreach($rs->fetch_fields() as $f) {
        $fnam = $f->name;
        echo "<th>$fnam</th>\r\n";
    }
    while(($row = $rs->fetch_row())) {
        echo "<tr>\r\n";
        foreach($row as $fval) {
            echo "<td>$fval</td>\r\n";
        }
        echo "</tr>\r\n";
    }
    echo "</tr>\r\n";   
    echo "</table>\r\n";   
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester





CIO
Stort CIO-interview: Lemvigh-Müllers milliard-omsætning er blevet digital