While-lus in 2 kolommen.

Status
Niet open voor verdere reacties.

Hobbit

Gebruiker
Lid geworden
15 okt 2002
Berichten
129
Hallo,

Ik probeer uit te vogelen hoe ik een while-lus in 2 kolommen krijg. Op dit moment krijg ik het alleen voor elkaar om records uit een db onder elkaar te zetten.

Voorbeeld:

Record1
Record2
Record3
Record4

Wat ik naar op zoek ben is:

Record1 Record2
Record3 Record4

Hoe pas ik onderstaande code aan? Waar moet ik naar zoeken. Het hoeft niet voorgekauwd te worden, even een duw in de juiste richting:D

PHP:
<?php
$sql = "SELECT * FROM `table` ORDER BY 'id' ASC;";
$result = mysql_query($sql) or die(mysql_error());


while ($obj = mysql_fetch_object($result)) {
echo '<!-- '.$obj->id.' -->';
echo '<table>';
echo '<tr><td>'.$obj->id.'</td>';
echo '<td>'.$obj->header_txt.'</td>';
echo '<td>'.$obj->body_txt.'</td>';
echo '</table>';
}
?>

Alvast bedankt.
 
Zet je eerste <tr> buiten de while, maak binnen je while loop nog een while loop die het aantal lussen telt en elke X lussen een '</tr><tr>' neerzet en zet buiten je hoofd-while nog een extra </tr>

Dan zou je een heel eind moeten komen :)
 
er zijn verschillende manieren je kunt ze in divjes zetten en deze helft van de grote van de maximale breedte van het vak geven.
of wat ook kan
PHP:
$i = $i+1;
	
if ($i / 2 != round($i / 2)) 
 { 
   $positie = "positie1"; 
 } 
 else 
 { 
  $positie = "positie2"; 
 }
if ($positie == "positie1"
{
   echo "</tr> </table>";
}
zoiets in je code ffe snel bedacht :P
en anders sluit je gewoon de table af zoiets
 
Laatst bewerkt:
PHP:
if ($i / 2 != round($i / 2))

Kan makkelijker (en efficienter) met modulo (division remainder)

PHP:
if (fmod($i, 2) != 0)

" != 0" kun je ook nog weg laten

PHP:
if (fmod($i, 2))

:thumb:
 
Dan kun je nog beter een flip functie nemen, als je die kant op gaat ;)

PHP:
function flip ( $option1, $option2 ) {
  static $i = 0;
  $i++;
  return $i % 2 ? $option1 : $option2 ;
}

Dan gebruik je daarna gewoon

PHP:
 flip ( 'positie1', 'positie2' );

(Je kunt em ook vrij makkelijk herschrijven om een lijst met argumenten aan te nemen, als iemand dat wil zien moet ie maar roepen :P)

Maar ik weet niet hoe moeilijk Hobbit het wil hebben en hoeveel hij van PHP kent al :)
 
PHP heeft de modulo operator? :shocked: En ik vondt het al debiel dat PHP hem niet had. Nou vraag ik me toch af hoe ik daar bij kwam :p
 
Haha, deze Hobbit zit nog in de fase "PHP voor Dummies";)

Frats, je eerste mogelijkheid sluit volgensmij het beste aan bij m'n nivo:D

Alleen, hoe maak ik een while-lus die het aantal lussen telt? Ik heb even gezocht, maar kon zo snel geen voorbeeld vinden.:confused:

Alvast bedankt voor je hulp.
 
Het is waarschijnlijk simpeler dan je denkt :)

PHP:
$aantal_lussen = 0
While ( $conditie ) {
$aantal_lussen = $aantal_lussen + 1;
    While ( $conditie2 ) {
        Expressie;
    }
}
 
Hoi Frats,

Sorry voor de late reactie. Ik ga er komende week even naar kijken of ik het voor elkaar krijg. Het ziet er inderdaad logisch uit.:rolleyes:
Ik kom er nog op terug.

Erg bedankt alvast.:thumb:
 
Hallo Frats,

Ik zit hier te stoeien, maar ik geloof dat ik er een beetje een puinhoop van aan het maken ben:confused:
Misschien kun je me verder helpen?

PHP:
<?php 
$sql = "SELECT * FROM `table` ORDER BY 'id' ASC;"; 
$result = mysql_query($sql) or die(mysql_error()); 

echo '<table>'; 
echo '<tr>';

while ($obj = mysql_fetch_object($result)) {
{
$aantal_lussen = 0 
While ( $conditie ) { 
$aantal_lussen = $aantal_lussen + 1; 
    While ( $conditie2 ) { 
        Expressie; 
    } 
}}
echo '<!-- '.$obj->id.' -->'; 

echo '><td>'.$obj->id.'</td>'; 
echo '<td>'.$obj->header_txt.'</td>'; 
echo '<td>'.$obj->body_txt.'</td>'; 
}
echo '</tr>';
echo '</table>'; 
?>

Wat me niet helemaal duidelijk is waar ik de </tr><tr> neer zet. En waar zet ik de lus-counter binnen de hoofd-while?

Mijn dank is wederom erg groot.:thumb:
 
Hmm, als ik het zo zie is die tweede lus hier helemaal niet nodig... want het werkt met 1 lus ook wel :)

Het enige is dat het kan gebeuren dat je een lege rij krijgt aan het einde, daar is niet heel makkelijk iets aan te doen, vrees ik.

Dan komt het er als het goed is zo uit te zien:

PHP:
<?php 
$sql = "SELECT * FROM `table` ORDER BY 'id' ASC;"; 
$result = mysql_query($sql) or die(mysql_error()); 

echo '<table>'; 
echo '<tr>';

// we beginnen met 0 lussen
$aantal_lussen = 0;
while ($obj = mysql_fetch_object($result)) {
    // iedere keer aan het begin zijn we 1x gelust
    $aantal_lussen = $aantal_lussen + 1; 
    echo '<!-- '.$obj->id.' -->'; 
    echo '<td>'.$obj->id.'</td>'; 
    echo '<td>'.$obj->header_txt.'</td>'; 
    echo '<td>'.$obj->body_txt.'</td>'; 
    // iedere keer dat het aantal lussen deelbaar is op 2, doen we een nieuwe rij
    if ( $aantal_lussen % 2 == 0 ) {
       echo '</tr><tr>';
    }
}

echo '</tr>';
echo '</table>'; 
?>
 
Laatst bewerkt:
Hey Frats,

Fantastisch!!!!:thumb:

Dit was de oplossing. Alleen een } teveel aan het einde.

Thanks alot!!

Cheers.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan