[PHP] Tabel weergave na MySQL select

Pagina: 1
Acties:

  • Renegade
  • Registratie: December 2000
  • Laatst online: 14-10-2020
Ik heb de volgende PHP 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
<?
include "html.inc";
include "db.inc";
connectie();

$query = "SELECT * FROM opdracht";
$result= mysql_query($query);

print("<TABLE BORDER=2>");
$column_count = mysql_num_fields($result);
while($rij=mysql_fetch_array($result))
    {
        $field_name =  mysql_field_name($result, $column_num);
        print("<TH>$field_name</TH>");
        print("<TR ALIGN=LEFT VALIGN=TOP>");
        for ($column_num=0;
             $column_num < $column_count;
             $column_num++)
        print("<TD>$rij[$column_num]</TD>");
        print("</TR>\n");
    }
</TABLE>
?>

en als resultaat hiervan krijg ik:
code:
1
2
3
4
5
6
Warning: Field 21 is invalid for MySQL result index 2 in /usr/local/httpd/htdocs/project/opdracht_historie.php on line 16

opdrachtnr 
1 20011212111629 Af fabriek 2001-12-14 15:22:00 2001-12-15 15:00:00  rk7548 ps538 nee nee bla nee   0000-00-00     
 
2 20011212120355  0000-00-00  0000-00-00

Nu wil ik eigenlijk gewoon de kolomnamen weergeven, maar dat doet hij alleen voor de kolom Opdrachtnr. |:(

Nu heb ik zelf het idee dat ik de de kolomnaam maar 1x weergeef omdat ik hem niet goed in een lus heb geplaatst, maar wat nu de goede code is? Kan iemand me uitleggen wat ik fout doe :?

HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE
@BasRaayman op twitter


Verwijderd

Volgens mij moet je column_num boven de while lus declareren, want hij kent 'm alleen maar in de for-lus.

  • Renegade
  • Registratie: December 2000
  • Laatst online: 14-10-2020
Geeft een ander resultaat, maar dit is nog steeds niet helemaal het gewenste :)

resultaat nu:
code:
1
2
3
4
opdrachtnr 
1 20011212111629 Af fabriek 2001-12-14 15:22:00 2001-12-15 15:00:00  rk7548 ps538 nee nee bla nee   0000-00-00     
opdrachtnr 
2 20011212120355  0000-00-00  0000-00-00

en wat ik uiteindelijk wil bereiken is (bijvoorbeeld):
code:
1
2
3
opdrachtnr datum-aanvraag afleveringscondities etc....
1       20011212111629 Af fabriek        2001-12-14 15:22:00 2001-12-15 15:00:00  rk7548 ps538 nee nee bla nee   0000-00-00     
2       20011212120355  0000-00-00  0000-00-00

Oftewel, de naam van een kolom wil ik automatisch uitlezen uit de tabel. Kan dit überhaupt, en zo ja "wat doe ik fout" :?

HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE
@BasRaayman op twitter


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

men neme 1 klik en dan ziet men dit
:)

Doet iets met Cloud (MS/IBM)


  • [ti]
  • Registratie: Februari 2000
  • Niet online
Nja.. deze code had ik nog liggen dus wellicht kun je hier wat mee als je dit ff doorspit:
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
<?
function makeTable($result)
{

    if (mysql_num_rows($result) == 0)
    {
        echo "<br><br>Geen resultaat";
        exit;
    }

    echo "<table><tr>";

    $i = 0;
    while ($i < mysql_num_fields ($result))
    {
        $meta = mysql_fetch_field ($result);

        if (!$meta)
            echo "<td>&amp;nbsp;</td>";
        else
            echo "<td>$meta->name</td>";

        $i++;
    }

    echo "</tr>";

    while ($myrow=mysql_fetch_array($result))
    {
        $i = 0;
        echo "<tr>";

        while ($i < mysql_num_fields ($result))
        {
            $meta = mysql_fetch_field ($result, $i);

            if (!$meta)
                echo "<td>$nbsp;</td>";
            else
            {
                echo "<td>";
                echo $myrow[$meta->name];
                echo "</td>";
            }

            $i++;
        }

        echo "</tr>";
    }
    echo "</table>";
}
?>

  • Renegade
  • Registratie: December 2000
  • Laatst online: 14-10-2020
Op donderdag 13 december 2001 09:43 schreef D2k het volgende:
men neme 1 klik en dan ziet men dit
:)
Been there, done that ;)

En nu staat daar ook wel het voorbeeld
PHP:
1
2
3
4
5
6
<?
$res = mysql_query("select * from users");

echo mysql_field_name($res, 0) . "\n";
echo mysql_field_name($res, 2);
?>

En ik weet dat ik het aantal kolommen kan tellen ($aantal_kolommen), en iedere keer de naam van de kolom kan afdrukken zolang ik niet aan het $aantal_kolommen zit. Alleen krijg ik de code niet zo in elkaar verweven dat ie de kolomtitels maar 1x afdrukt, en de rest van de code (rijen uitlezen en afdrukken) net zolang uitvoert als er rijen zijn...

En nu ik dit zo typen, zit ik me een mogelijkheid te bedenken hoe het misschien kan |:(

* Renegade is PHP n00b :{

HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE
@BasRaayman op twitter


  • [ti]
  • Registratie: Februari 2000
  • Niet online
Nou, dat kan dus zoals in die functie boven aangegeven.

Stel je hebt een tabel die er zo uitziet:
code:
1
2
3
4
5
6
7
8
mysql> describe tblcountry;
+-------+--------------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| name  | varchar(255) | YES  |     | 0  |   |
| code2 | char(2)   | YES  |     | 0     |   |
| code3 | char(3)   | YES  |     | 0     |   |
+-------+--------------+------+-----+---------+-------+

Dan doet deze code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
    $i = 0;
    while ($i < mysql_num_fields ($result))
    {
        $meta = mysql_fetch_field ($result);

        if (!$meta)
            echo "<td>&amp;nbsp;</td>";
        else
            echo "<td>$meta->name</td>";

        $i++;
    }
?>


code:
1
<td>name</td><td>code2</td><td>code3</td>

Als output geven. Dat is dus zegmaar de 'header' van de tabel.
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
<?
    while ($myrow=mysql_fetch_array($result))
    {
        $i = 0;
        echo "<tr>";

        while ($i < mysql_num_fields ($result))
        {
            $meta = mysql_fetch_field ($result, $i);

            if (!$meta)
                echo "<td>$nbsp;</td>";
            else
            {
                echo "<td>";
                echo $myrow[$meta->name];
                echo "</td>";
            }

            $i++;
        }

        echo "</tr>";
    }
?>

Print het uiteindelijke resultaat van je query, en voegt het dus toe aandezelfde tabel. De functie die ik net gepost heb roep je aan met makeTable($result); $result is dan het resultaat wat je terugkreeg van mysql_query().

  • Renegade
  • Registratie: December 2000
  • Laatst online: 14-10-2020
Hij werkt :D

Maar nu vertel ik eens wat ik denk dat de code doet, kun jij me daar wat commentaar op geven, op die manier kan ik iig doorzien wat de code doet.
Op donderdag 13 december 2001 10:21 schreef [ti] o.a. het volgende:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
    $i = 0;
    while ($i < mysql_num_fields ($result))
    {
        $meta = mysql_fetch_field ($result);

        if (!$meta)
            echo "<td>&amp;amp;amp;nbsp;</td>";
        else
            echo "<td>$meta->name</td>";

        $i++;
    }
?>
Je zet een teller op 0. Zolang er een titel kan worden opgehaald hoog je $i ook met 1 op, en print je $meta->name (wat doet dit :?). Is de teller gelijk, dan spring je uit de lus.

Klopt mijn beeld hierover ongeveer?

Enneh, iedereen bedankt voor de hulp :)

HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE
@BasRaayman op twitter


  • [ti]
  • Registratie: Februari 2000
  • Niet online
Je beeld van de code klopt ongeveer. Ik zal het stukje van mysql_fetch_field even uitleggen:
mysql_fetch_field -- Get column information from a result and return as an object
Dit houdt dus in dat na '$meta = mysql_fetch_field ($result);' $meta een object is. Uitleg van alle variable van dit object staan http://php.mirror.widexs.nl/manual/nl/function.mysql-fetch-field.php daar. Met $meta->variable spreek je zo'n variable aan. de variable name in dat object is dus de naam van de kolom.

De helemaal juist uitleg van de code in nederlands:

1. Stel teller $i op 0.
2. Zolang $i kleiner is dan het aantal fields (mysql_num_fields):
2.1 Vraag de informatie van het field op (mysql_fetch_field) en zet dit object in $meta
2.2 als de informatie van het field er niet is
2.2.1 print <td> </td>
2.3 en als die informatie er wel is
2.3.1 print <td> naam van het field ($meta->name) </td>
2.4 hoog $i op

Hoop dat het duidelijk is.

  • Renegade
  • Registratie: December 2000
  • Laatst online: 14-10-2020
Bedankt voor de uitleg, die is precies simpel genoeg zodat ook ik hem snap ;) :P

Thanks!

HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE
@BasRaayman op twitter

Pagina: 1