[PHP] MySQL fetch opdelen in html table rijen *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ergens in mijn site haal ik productcategorien op uit een database. Deze worden vervolgens naar het scherm geschreven:

PHP:
1
2
3
4
while ($prod = db_fetch_object($qid_p))
{
    print "<li><a href=\"detail.php?id=$prod->id\">$prod->name</a>";
}

produceert:

HTML:
1
2
3
4
5
6
* Computers
* Mobiele Telefoons
* Audio en Video
* Camera en Foto
* Kantoor electronica
* Computerspellen


Nu wil ik deze categorien in plaats van onder elkaar, naast elkaar in een tabel zetten. Bijvoorbeeld:

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
html output:

<tr>
  <td>computers</td>
  <td>mobiele telefoons</td>
  <td>audio en video</td>
  <td>camera en foto</td>
</tr>
<tr>
  <td>kantoor electronica</td>
  <td>computerspellen</td>
  <td>&nbsp;</td>
  <td>&nbsp;</td>
</tr>

ofwel in de browser:

+------------------------+-------------------+----------------+----------------+
| computers              | mobiele telefoons | audio en video | camera en foto |
+------------------------+-------------------+----------------+----------------+
| kantoor en electronica | computerspellen   |                |                |
+-----------+--------------------------------+----------------+----------------+


Hiervoor moet ik het eerder gegeven PHP-loopje aanpassen. Ik kan het wel beschrijven, maar heb moeite om het in code om te zetten.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
* tel aantal categorien dat terugkomt uit de database (bv. 8)
* deel dit voor 4 (bv. 8 : 4 = 2)
* neem de eerste 4 categorien en draai de volgende loop af:

print "<tr>";

    for (...iets...)
    {
        print "<td><a href=\"detail.php?id=$prod->id\">$prod->name</td>";
    }

print "</tr>";

* neem de volgende 4 categorien en draai dezelfde loop af. Als er minder categorien overblijven (bijvoorbeeld 3), vul dan 1 keer <td>&nbsp;</td> in


Kan iemand mij hiermee op weg helpen, ideeen aandragen?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

je kan in je while lus bijv een index bijhouden en bij 1 t/m 4 maak je nieuwe kolom en als de index 5 is, dan wordt de index weer 1 en begin je met <tr> een nieuwe rij

Multimonitor is relax :P


Acties:
  • 0 Henk 'm!

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07 12:07
je deelt (ceil) je totaal door het aantal dat je per row wilt en dan per row het aantal. gebruik mod om te zien waar ie ophoudt.

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
MeIsTwisted schreef op 21 december 2003 @ 18:23:
je kan in je while lus bijv een index bijhouden en bij 1 t/m 4 maak je nieuwe kolom en als de index 5 is, dan wordt de index weer 1 en begin je met <tr> een nieuwe rij
Kun je beter doen met:

code:
1
if($index%4==0) { /* nieuwe rij */ echo "</tr><tr>"; }

Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
alvast bedankt voor de snelle reakties tot nu toe. Ik ben alleen nog niet heel lang bezig met PHP en heb iets meer houvast nodig. Zou iemand een stukje pseudo code kunnen geven? Dit neigt naar een scriptrequest, en dat besef ik. Toch, ik worstel er al dagen mee }:O en het schiet maar niet op...

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

GlowMouse schreef op 21 december 2003 @ 18:25:
[...]


Kun je beter doen met:

code:
1
if($index%4==0) { /* nieuwe rij */ echo "</tr><tr>"; }
zeker, maar misschien om het wat simpeler te houden, koos ik voor deze manier.

Multimonitor is relax :P


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Het zal er dan zo uitzien ongeveer (niet getest):

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
echo "<table><tr>";
$i=0;
$qid_p=mysql_query("SELECT id,name FROM table");
while ($prod = db_fetch_object($qid_p))
{
  $i++; // index ééntje hoger
  echo "<td><a href=\"detail.php?id=$prod->id\">$prod->name</a></td>"; // nieuwe kolom
  if($i%4==0) { /* nieuwe rij */ echo "</tr><tr>"; }
}
$a=$i%4;
for($i=1; $i>$a; $i++) {
  echo "<td>&nbsp;</td>";
}
echo "</tr></table>";

Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Verdorie GlowMouse, het werkt! Dank je wel hoor :)


PHP:
1
2
3
4
$a=$i%4; 
for($i=1; $i>$a; $i++) { 
  echo "<td>&nbsp;</td>"; 
}


Werkt alleen niet - wordt niet uitgevoerd. Maar dat maakt niet uit: dat is te fixen.

_/-\o_

[ Voor 9% gewijzigd door Reveller op 21-12-2003 20:10 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
PHP:
1
2
3
4
$a=$i%4; 
for($i=1; $i<$a; $i++) { 
  echo "<td>&nbsp;</td>"; 
}


gefixt ;)

Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
PHP:
1
2
3
4
5
6
<?
$a=$i%4; 
for($i=1; $i<=$a; $i++) { 
  echo "<td>&nbsp;</td>"; 
}
?> 


de fix gefixed ;) nu werkt het perfect, dank je!

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."

Pagina: 1