Flush() während foreach()

The619

Grünschnabel
Hallo zusammen,

ich würde gern während einer foreach-Schleife eine flush() realisieren,
meine Frage ist ob dies überhaupt möglich ist.

Sollte das möglich sein würde man es auch schaffen, während einer foreach eine kleine Grafik anzuzeigen?
Wie z.b. so nen animierten Grafikbalken.

Wäre über jede Hilfe dankbar.

Steffen
 
Möglich ist schon so etwas wie:

PHP:
<?
$array = array(1,2,3,4,5,6,2,2,3,4,1,1,2,3,4,4);
foreach ($array as $key){
    echo $key;
    flush();
    sleep(1);
}
?>

Aber wirklich Sinnvoll? Es ist schwer soetwas sinnvoll in ein Design einzubauen. Ladebalken die mehr Zeit brauchen sind wohl Sinnvoller mit Javascript zu machen.

Gängig ist auch die Methode beim "klick" per Javscript eine Grafik einzublenden.. ein bewegtes Gif und darunter "Bitte warten". Und bei der Seite mit der langen Ladezeit per ob_start() abzufangen das das angezeigte zu schnell wieder verschwindet sondern eben erst wenn die andere Seite geladen ist.
 
Danke für die sehr schnelle Antwort.

Dein Beispiel funktioniert super und ist logisch, bei mir funktioniert der Einbau aber leider nicht.

Ich bekomme Ergebnisse aus einer Datenbank die ich einer Optionlist hinzufüge.

PHP:
                      foreach($rows as $id => $row) 
                      {
                        $teile = explode("_",$row);
                        
                        if($ie == 1)
                        {
                         $ausgabe = "<option id=\"myid\" name=\"myid\" value=\"$teile[0]_$teile[1]_$teile[2]_$id\">$teile[0]</option>";
                        }
                        if($ff ==1)
                        {
                         $ausgabe = "<option id=\"myid\" onclick=\"setzeid('$teile[0]', '$id', '$teile[1]', '$teile[2]');\" name=\"myid\" value=\"$id\">$teile[0]</option>";
                        }
                                                
                        echo $ausgabe;                                    
                        flush();    
                      }


Bitte nicht von der unterscheidung IE und FF abbringen lassen, musste ich einbauen da IE und Firefox das OnClick-Handleling anders abarbeiten.

Irgendeine Idee wie ich mein Problem bewerkstelligen kann?

Steve-O
 
Ich denke einfach mal das Es an der Art deiner Daten liegt, HTML Teilweise an den Browser zu senden muss nicht unbedingt noch richtig lesbar für ihn sein. Zu den Zeitpunkten wo er die <option> bekommst, ist das <select> zB noch nicht geschlossen, und das Konstrukt ausenrum auch nicht. Gut möglich das deine Probleme daher kommen. Aber während eines einfachen echos so etwas einzubauen ist wohl generell weniger sinnvoll.

Ich dachte eher das du Grafiken resized oder Ähnliches das PHP wirklich Zeit kostet und er für einen kompletten Seitenload 20sek aufwärts braucht.

Wie gesagt vielleicht hilft dir auch Ajax weiter, generell ist das aber so schon der Richtige weg, es lässt sich nur eben nicht so einfach verwenden / einbauen wie man vielleicht gerne hätte.
 
Hättest du eine Idee wie man während der Foreach() eine Grafik einbaut?

So das der user eben weiß das da im Hintergrund gerade Daten aus der Datenbank geladen werden? Dann lass ich das nämlich so wie es ist, und gebe die Daten die dann vorhanden sind erst zum Schluss aus, wenn sie komplett "da sind".

Ne Grafik wär schon was tolles... denke mal das man dabei auch nicht an flush() vorbeikommt.
 
Nehmen die Operationen denn so viel Zeit in Anspruch, dass eine stückweise Ausgabe nötig ist? Denn allgemein verlangsamt das das Rendern des Dokuments, da immer wieder auf das nächste Teilstück gewartet wird.
 
Am einfachsten Erreichst du den Effekt wie oben bereits erwähnt.

In der kommenden Seite legst du auf das OnClick eine Javascript funktion die ein gif groß über der website anzeigt:

http://images.google.de/images?hl=de&q=loading gif&ie=UTF-8&oe=UTF-8&um=1&sa=N&tab=wi

In der seite die lange läd machst du ob_start() am anfang. Dann sieht man das Gif solange bis die neue Seite fertig geladen ist. Jemand der kein Javascript aktiv hat wartet einfach eben so.

Schöner geht es noch per Ajax die Daten nachladen und dort ein solches Gif anzeigen lassen. Bis eben die Daten ankommen.
 
Zurück