PHP Wenn while-Schleife 5 mal ausgeführt...

ClocxHD

Lt. Junior Grade
Registriert
Aug. 2014
Beiträge
376
Hallo,

ich frage mit PHP Einträge aus einer Datenbank ab.
Das funktioniert auch soweit.
Allerdings möchte ich, dass der einen Zeilenumbruch nach 5 Einträgen ausgibt.
Ich habe es so versucht:
PHP:
$i = 0;
while ($row = mysqli_fetch_object($res)) {
                    //mein code;
                    if ($i == 5) {
                        echo "<br />";
                    }
                    $i = $i+1;
 }

LG,
ClocxHD
 
Und das klappt nun alles wunderbar und wir sollen uns mit dir freuen? :D




Ich würde sagen, dass du $i zu Beginn auf 1 setzen solltest, zudem musst du $i in der if-Anweisung wieder auf 1 zurücksetzen, sonst wird $i immer größer und nie wieder gleich 5 (alternativ mit dem Modulo-Operator prüfen, ob dein aktuelles $i dividiert durch 5 einen Rest hat: if($i % 5 == 0 { .. } $i++;).
 
Zuletzt bearbeitet:
Funktioniert immer noch nicht.
Code:
PHP:
$i = 1;
while ($row = mysqli_fetch_object($res)) {
//code;
    if ($i % 5 == 0) {
        echo "<br />";
        $i = 1;
    }
}
 
1.) das was Snooty sagt
2.) Ich weiß ja nicht, was dein Code genau macht, aber im Zweifel ist es nicht zielführend, wild irgend welche <br>'s einzufügen. Du willst einen Zeilenumbruch? Ist er semantisch notwendig, dann <br>. Ist er aber nur pure Gestaltung, dann löse es in CSS. Wozu gibts :nth-child?

Edit: Es funktioniert nicht, weil dein $i nicht inkrementiert wird.
 
Er gibt gar keine Zeilenumbrüche aus.
 
Programmieren heißt eben auch immer: Verstehen, was man da schreibt...

Ich empfehle dir: Schreib keinen Programmcode, sondern fang mit einem Programmablaufplan an, schön mit PApier & Bleistift. Dann siehst du deine Fehler deutlich besser.
 
Wie gesagt, in deinem zuletzt geposteten Code fehlt, dass du $i in jedem Durchlauf erhöhst.


Du kannst dir in deiner Schleife (außerhalb der if-Anweisung) auch einfach mit echo immer dein aktuelles $i ausgeben lassen - dann siehst du wann bzw. wie oft bzw. ob du überhaupt mal den Fall $i == 5 hast.

Dann kannst du deinen Fehler schneller eingrenzen.
 
Wenn ich i ausgebe, steht an allen Elementen 1.
Hab das aber mit CSS gelöst:
li:nth-child(6) {
display: block;
}
Ergänzung ()

Ok, ganz gelöst habe ich es doch nicht, sieht jetzt so aus:
Bildschirmfoto vom 2015-04-18 22:35:29.png
 
PHP:
                $i = 1;
                while ($row = mysqli_fetch_object($res)) {
                   //code;
                    if ($i==5) {
                        echo "<br />";
                        $i++;
                    }
                    echo $i;
                }
 
Für die erste Reihe funktioniert es schonmal, allerdings nicht für die zweite.
Screenshot: http://puu.sh/hiEnc/95c1b11139.jpg

Code:
PHP:
$i = 1;
while ($row = mysqli_fetch_object($res)) {
    //code;
    if ($i==5) {
        echo "<br />";
    }
    $i++;
    echo $i;
}
 
Zuletzt bearbeitet:
Die Vorschläge mit dem Programmablaufplan oder printf-Debugging sind im Moment wohl die, die dir am meisten helfen dürften. Spiele selbst Computer und führe deinen Code aus.
 
ClocxHD schrieb:
Für die erste Reihe funktioniert es schonmal, allerdings nicht für die zweite.
Screenshot: http://puu.sh/hiEnc/95c1b11139.jpg

Code:
PHP:
$i = 1;
while ($row = mysqli_fetch_object($res)) {
    //code;
    if ($i==5) {
        echo "<br />";
    }
    $i++;
    echo $i;
}

...was genau das ist was du da programmiert hast: ein br gibts nur wenn i = 5 ist, das passiert genau einmal wenn du i hochzählst. Surprise! *Konfetti*
PHP:
$i = 1;
while ($row = mysqli_fetch_object($res)) {
    //code;
    if ($i % 5 == 0) {
        echo "<br />";
    }
    $i++;
}

So wird ein Schuh draus: wenn der Rest von i durch 5 gleich 0 ist, gib ein br aus.

Oder Optional:

PHP:
$i = 1;
while ($row = mysqli_fetch_object($res)) {
    //code;
    if ($i == 5) {
        echo "<br />";
        $i = 0;
    }
    $i++;
}
 
ClocxHD schrieb:
Wenn ich i ausgebe, steht an allen Elementen 1.
Hab das aber mit CSS gelöst:
li:nth-child(6) {
display: block;
}
Ergänzung ()

Ok, ganz gelöst habe ich es doch nicht, sieht jetzt so aus:
Anhang anzeigen 488492

Ja, weil du hier gesagt hast "setze das sechste Element auf BLOCK". Du wolltest aber sagen "setze JEDES sechste Element auf BLOCK".

Dein ganzes Problem im PHP-Code hättest du allein lösen können, indem du einfach mal deinen Code Zeile für Zeile mit Papier & Bleistift "ausgeführt" hättest.
Jeder Algorithmus, der nicht so trivial ist, dass du ihn im Kopf direkt durchblicken kannst, muss eben manuell durchgeplant werden, in Kleinarbeit mit vielen einzelnen Schritten.
 
Zurück
Oben