[PHP] recordset weergeven in twee rijen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ik kom er helemaal niet meer uit. Ik hoop dat jullie mij kunnen helpen. De situatie is als volgt.

Ik heb een script waarmee ik plaatjes kan uploaden naar de server. Als ik een plaatje upload, wordt deze automatisch hernoemd (naar een random getal) en wordt er een thumbnail gemaakt. Bij het uploaden heb ik de mogelijkheid om een kleine beschrijving met het plaatje mee te sturen. Deze informatie wordt in de database opgeslagen in de kolom 'alt'. Het 'iid' is het image ID en correspondeert met de random naam van het plaatje.

Voor het admin gedeelte wil ik een overzichtspagina van alle plaatjes maken. Onder elk plaatje moet uiteindelijk de naam van het plaatje (het random getal, in de database 'iid') en deze alt-informatie komen te staan. Het script hieronder moet uiteindelijk dit overzicht weergeven, maar ik kom er niet helemaal (helemaal niet?) uit:
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
$result      = db_query("SELECT iid, alt, dt FROM images ORDER BY dt ASC");
            
$num_images  = db_num_rows($result); // aantal plaatjes dat in de database staat
$img_per_row = 4; // aantal plaatjes per rij
$num_rows    = $num_images / 4; // aantal rijen (niet afgerond)
$ceil_rows   = ceil($num_rows); // aantal rijen naar boven afronden (2.25 wordt 3)
$i = 0;

$body.= '<table border="1" width="100%"><tr>';

while ($image = db_fetch_array($result)) {
  $i++;

  $body.= '<td width="25%">[img]"uploads/images/thumbs/'.$image['iid'].'.jpg"></td[/img]';

  if ($i % $img_per_row == 0) {
    $body.= '</tr><tr>';

    for ($a = 0; $a < $img_per_row; $a++) {
      $body.= '<td>'.$image['iid'].'</td>';
    }

    $body.= '</tr><tr>';                                
  }
}
            
$body.= '</tr></table>';

Dit levert het volgende op:

Afbeeldingslocatie: http://www.odisys.net/got/admin1.gif

Met dit beeld zijn twee dingen mis:

• als er geen 4 (maar minder) plaatjes in een rij staan (zoals in rij 3), dan krijg ik er geen twee tabel cellen onder om het iid in te zetten, zoals wel bij de overige rijen het geval is
• het iid is verkeerd! 1091813981 is het iid van het vierde plaatje dat deze query retourneert, en 1091812399 is het iid van het achtste plaatje.

Het probleem is dat ik twee rijen onder elkaar moet aanmaken, en hetzelfde element uit de recordset moet kunnen aanspreken. Maar omdat ik een loop in een loop heb, lukt dit maar niet.

Volgens mij heb ik een verkeerd denkpatroon. Wie helpt mij daaruit te ontsnappen }:O ?

"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!

  • pthn
  • Registratie: Februari 2003
  • Laatst online: 31-07-2023
Als je nu
PHP:
1
2
3
4
5
6
7
8
while ($image = db_fetch_array($result)) {
  $i++;
  $body.= '<td width="25%">[img]"uploads/images/thumbs/'.$image['iid'].'.jpg"></td[/img]';
  if ($i % $img_per_row == 0) {
    $body.= '</tr><tr>';
    for ($a = 0; $a < $img_per_row; $a++) {
      $body.= '<td>'.$image['iid'].'</td>';
    }

vervangt door:
PHP:
1
2
3
4
5
6
7
while ($image = db_fetch_array($result)) {
  $i++;
  $body.= '<td width="25%">[img]"uploads/images/thumbs/'.$image['iid'].'.jpg">
[/img]'.$image['alt'].'</td>';
   if ($i % $img_per_row == 0) {
    $body.= '</tr><tr>';
   }


dan gebruikt je de data die je in de array $image (idd, alt ..) gewoon gelijk

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
linkje met html output?

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
@pthn - (zie beginpost) dat wil ik nu juist niet, omdat niet alle plaatjes even hoog zijn. Ik wil dat alle alt-tekst op gelijke hoogte, dus in een nieuwe rij, komt te staan.

@Grijze Vos:
HTML:
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
<table border="1" width="100%">
<tr>
  <td width="25%">[img]"uploads/images/thumbs/1091819660.jpg"></td>
[/img][img]"uploads/images/thumbs/1091817822.jpg"></td>
[/img][img]"uploads/images/thumbs/1091817070.jpg"></td>
[/img][img]"uploads/images/thumbs/1091813981.jpg"></td>
</tr>
<tr>
[/img]1091813981</td>
  <td>1091813981</td>
  <td>1091813981</td>
  <td>1091813981</td>
</tr>
<tr>
  <td width="25%">[img]"uploads/images/thumbs/1091817962.jpg"></td>
[/img][img]"uploads/images/thumbs/1091818357.jpg"></td>
[/img][img]"uploads/images/thumbs/1091816603.jpg"></td>
[/img][img]"uploads/images/thumbs/1091812399.jpg"></td>
</tr>
<tr>
[/img]1091812399</td>
  <td>1091812399</td>
  <td>1091812399</td>
  <td>1091812399</td>
</tr>
<tr>
  <td width="25%">[img]"uploads/images/thumbs/1091810525.jpg"></td>
[/img][img]"uploads/images/thumbs/1091814531.jpg"></td>
</tr>
</table[/img]

Zelfs netjes ge-indent :*) ;)

Zou dus moeten worden:

HTML:
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
<table border="1" width="100%">
<tr>
  <td width="25%">[img]"uploads/images/thumbs/1091819660.jpg"></td>
[/img][img]"uploads/images/thumbs/1091817822.jpg"></td>
[/img][img]"uploads/images/thumbs/1091817070.jpg"></td>
[/img][img]"uploads/images/thumbs/1091813981.jpg"></td>
</tr>
<tr>
[/img]1091819660</td>
  <td>1091817822</td>
  <td>1091817070</td>
  <td>1091813981</td>
</tr>
<tr>
  <td width="25%">[img]"uploads/images/thumbs/1091817962.jpg"></td>
[/img][img]"uploads/images/thumbs/1091818357.jpg"></td>
[/img][img]"uploads/images/thumbs/1091816603.jpg"></td>
[/img][img]"uploads/images/thumbs/1091812399.jpg"></td>
</tr>
<tr>
[/img]1091817962</td>
  <td>1091818357</td>
  <td>1091816603</td>
  <td>1091812399</td>
</tr>
<tr>
  <td width="25%">[img]"uploads/images/thumbs/1091810525.jpg"></td>
[/img][img]"uploads/images/thumbs/1091814531.jpg"></td>
[/img]&nbsp;</td>
  <td>&nbsp;</td>
</tr>
<tr>
  <td>1091810525</td>
  <td>1091814531</td>
  <td>&nbsp;</td>
  <td>&nbsp;</td>
</tr>
</table>

Maar nogmaals - ik heb geen idee meer hoe, omdat <td width="25%">[img]"uploads/images/thumbs/1091819660.jpg"></td>[/img]1091813981</td> (nummer eerste plaatje - rij 2, cel 1) niet na elkaar komen en ik ze dus niet na elkaar kan genereren... :?

[ Voor 171% gewijzigd door Reveller op 06-08-2004 22:05 ]

"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!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 12:54
Misschien is het een idee om twee losse strings te hebben in je while loop 1tje de plaatjes en de andere voor dat rare getal. Als je op het punt staat om een nieuwe row te fabriceren (if-statement met modulo enoz) dan die twee losse pas aan je $body te adden.

Dan krijg je (schematisch) zoiets:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
$body .= '<table>';
while() {
  $i++;
  if ($i % $img_per_row) {
    $body .= $imgstr.'<tr>'.$rarestr;
    $imgstr = '';
    $rarestr = '';
  }
 
  $imgstr .= '<td><img str="'.$image[iid].'.jpg">'
  $rarestr .= '<td>'.$image['iid'];
}
$body .= '</table>';

[ Voor 39% gewijzigd door Sybr_E-N op 06-08-2004 22:07 ]


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
@ Sybr_E-N - daar heb ik ook al aan gedacht, maar ik zie niet hoe dat werkt met meerdere rijen, want dan worden die twee strings telkens geleegd als je een nieuwe loop ingaat of ben ik nou gek?

[EDIT] JE hebt er nog code bij geschreven, dat stond er net nog niet :) En hartelijk dank je wel :) Zie hieronder het resultaat:

Afbeeldingslocatie: http://www.odisys.net/got/admin2.gif

Helemaal goed!

[ Voor 127% gewijzigd door Reveller op 07-08-2004 00:41 ]

"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