tabel output loop: 2 rijen op 1 regel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marina janssen

marina janssen

26/12/2016 00:32:31
Quote Anchor link
Ik heb tabel met een while loop en die ziet er nu grofweg zo uit: (één rij per regel)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<tr><td>$row['foto']</td><td>$row['naam']</td></tr>

Maar ik wil graag 2 rijen per regel.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<tr><td>$row['foto']</td><td>$row['naam']</td><td>$row['foto']</td><td>$row['naam']</td>           </tr>


Nou heb ik wat gegoogled maar het gaat mijn pet te boven. Ik denk dat ik iets moet doen met de oneven links en de even numrows rechts. Alleen hoe doe je dat? Ik heb wat lopen prutten maar ik kom er niet uit...Kan iemand me op weg helpen?
 
PHP hulp

PHP hulp

02/12/2024 17:29:37
 
Mitch PHP

Mitch PHP

26/12/2016 12:13:47
Quote Anchor link
Hey Marina, om rijen samen te voegen in een tabel kun je colspan of rowspan gebruiken, zie:

http://www.w3schools.com/html/tryit.asp?filename=tryhtml_table_colspan
http://www.w3schools.com/html/tryit.asp?filename=tryhtml_table_rowspan

Ik weet niet helemaal of je dit bedoelde, maar hopelijk helpt het je een beetje op weg :)
Gewijzigd op 26/12/2016 12:21:33 door Mitch PHP
 
Adoptive Solution

Adoptive Solution

26/12/2016 13:17:30
Quote Anchor link
Zoiets :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
$result = $db->query( $querySelect );

$flag = FALSE;

while ( $row = $result->fetch_object() ) {

    echo $flag == FALSE ? '<tr>' : '';
    echo '<td>' . $row->foto . '</td>';
    echo '<td>' . $row->naam . '</td>';
    echo $flag == TRUE ? '</tr>' : '';
    $flag = !$flag;

}
 
Thomas van den Heuvel

Thomas van den Heuvel

28/12/2016 16:00:39
Quote Anchor link
Hm ik zat al te denken aan oplossingen met modulorekenen enzo maar zouden gefloate divjes in een container niet veel makkelijker zijn? Wanneer een gefloat element niet past in de ruimte springt deze automatisch naar de volgende regel. Dit is precies wat je wilt?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>float test</title>
<style type="text/css">
.foto-container { width: 300px; } /* een veelvoud van de breedte van de .foto class */
.foto           { width: 100px; height: 50px; display: block; float: left; text-align: center; line-height: 50px; }
.even           { background-color: #ffcccc; }
.oneven         { background-color: #ccccff; }
</style>
</head>

<body>
<div class="foto-container">
<?php
// dummy resultaten
$results = 10;

// dummy loop
for ($i=0; $i < $results; $i++) {
    $class = ($i % 2 ? 'oneven' : 'even');
    ?>
<div class="foto <?php echo $class ?>">foto <?php echo $i ?></div><?php
}
?>

</div>
</body>
</html>

Het enige wat je hoeft te veranderen wanneer je een ander aantal foto's per regel wilt is de breedte van de container.

Afhankelijk van de data die je wilt weergeven kan het soms ook handiger zijn om een echte tabel te bouwen maar ik denk dat je in dit geval, voor de weergave van foto's, wel uit de voeten kunt met een container met gefloate divjes.
 
Marina janssen

marina janssen

14/01/2017 22:07:24
Quote Anchor link
Ik ben het rijtje afgegaan. De eerste was niet wat ik bedoel. De 2e van Adoptive Solution werkt perfect bij een even aantal (anders valt de laatste buiten de houder). Ik wil het graag aanpassen maar ja, ik begrijp eigenlijk alleen procedureel.
Kan ik er op een of andere manier een lege <td> aan de loop vastplakken bij een oneven aantal?
 
- SanThe -

- SanThe -

14/01/2017 22:29:21
 
Marina janssen

marina janssen

14/01/2017 23:00:20
Quote Anchor link
Nu is het perfect, dank!
 
Thomas van den Heuvel

Thomas van den Heuvel

14/01/2017 23:09:19
Quote Anchor link
Die code sluit alleen een rij alsnog af, maar voegt geen dummy-cellen toe als het aantal resultaten geen veelvoud is van het aantal items per rij, wat tot gevolg heeft dat dit syntactisch incorrecte tabellen oplevert? Volgens mij heb ik dat al eens aangehaald, maar die code is nog (steeds) niet aangepast.
 
- SanThe -

- SanThe -

14/01/2017 23:53:58
Quote Anchor link
Thomas van den Heuvel op 14/01/2017 23:09:19:
Die code sluit alleen een rij alsnog af, maar voegt geen dummy-cellen toe als het aantal resultaten geen veelvoud is van het aantal items per rij, wat tot gevolg heeft dat dit syntactisch incorrecte tabellen oplevert? Volgens mij heb ik dat al eens aangehaald, maar die code is nog (steeds) niet aangepast.


Script is nu aangepast.
 
Ben van Velzen

Ben van Velzen

15/01/2017 00:35:19
Quote Anchor link
Over dat script heb ik maar 1 opmerking: waarom noem je je variabele $dummy en niet $i zoals conventioneel gebruikt wordt? $dummy voelt als een nutteloze variabele terwijl hij dat echt niet is.
 
- SanThe -

- SanThe -

15/01/2017 00:40:15
Quote Anchor link
Het is maar een naampje.
Komt eigenlijk doordat Thomas het over dummy-cellen had.
Vind het verder niet echt interessant.
$i is ook prima.
 
Ben van Velzen

Ben van Velzen

15/01/2017 00:43:32
Quote Anchor link
Agreed, maar $dummy voelt ontzettend vreemd, misschien zou in dat geval iets als $dummy_count of $dummy_cellcount beschrijvender zijn. We hebben het hier over beginners, en zij moeten het script kunnen begrijpen, toch?
 
- SanThe -

- SanThe -

15/01/2017 00:48:12
Quote Anchor link
Wat jij wil... heb er $dummy_count van gemaakt.
 
Ben van Velzen

Ben van Velzen

15/01/2017 01:10:21
Quote Anchor link
Is niet bedoeld om te zeuren, maar gewoon om te zorgen dat er begreoen wordt wat je in het script aan het doen bent.
 
Thomas van den Heuvel

Thomas van den Heuvel

15/01/2017 16:37:21
Quote Anchor link
@marina ben ik toch benieuwd waarom een oplossing met gefloate divs geen optie is?

Voor de laatste cellen kun je ook het volgende doen (alternatief):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
if ($res->num_rows % $columns > 0) {
    for ($j = $i % $columns; $j < $columns; $j++) {
        ?>
<td>&nbsp;</td><?php
    }
    ?>
</tr><?php
}
?>

Er is iets voor te zeggen om lege cellen te voorzien van een spatie (non breaking space) zodat deze niet echt leeg zijn. Daarnaast zou ik persoonlijk het echo'en van HTML vermijden.

@Ben heeft ergens een (goed) punt. Naamgeving (van o.a. variabelen) is belangrijk. Ik zou $columns gebruiken in plaats van $naast_elkaar, en $j in plaats van $dummy_whatever. Variabelen met "dummy" erin hebben doorgaans geen betekenis, maar worden gebruikt als placeholders die verder niet gebruikt worden. $dummy_count wordt wel degelijk gebruikt om bij te houden of de foreach-lus klaar is, dus in dat opzicht is de naam niet echt handig gekozen.
Gewijzigd op 15/01/2017 16:52:03 door Thomas van den Heuvel
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.