Portal > Foren > PHP > PHP-Programmierung > Progress Class - Problem mit Flush
Antwort
 
Themen-Optionen
Alt 27.09.2005, 21:59 Nach oben    #1
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard Progress Class - Problem mit Flush

Hallo,
inspiriert von einer Progress-Klasse die ich irgendwo einmal per Google aufgeschnappt hatte, wollte ich folgendes anstellen (PHP 4
Das Ganze soll sich wie eine Art Ladebalken entwickeln, dazu wird JavaScript verwendet.
PHP-Code:
<?php

class progress {
        var 
$message '';
        var 
$width '';
        var 
$percent 0;

        function 
setMessage($message) {
                 echo 
'<script language="javascript" type="text/javascript">';
                 echo 
'setMessage("'.$message.'");';
                 echo 
'</script>';
                 echo 
"\r\n\r\n";
                 
flush();
        }
        
        function 
setPercent($percent) {
                 for(
$count = ($this -> percent); $count <= $percent$count ++) {
                         echo 
'<script language="javascript" type="text/javascript">';
                         echo 
'setPercent("'.$percent.'");';
                         echo 
'</script>';
                         echo 
"\r\n\r\n";
                         
flush();
                 }
                 
$this -> percent $percent;
        }
        
        function 
writeJS() {
                 echo 
'<script language="javascript" type="text/javascript">';
                 echo 
'(document.all) ? per = document.all[\'progress\'] : per = document.getElementById(\'progress\');';
                 echo 
'(document.all) ? msg = document.all[\'msglabel\'] : msg = document.getElementById(\'msglabel\');';
                 echo 
'function setPercent(percent) {';
                 echo 
'        per.innerHTML = "Fortschritt: " + percent + " %";';
                 echo 
'}';
                 echo 
'function setMessage(message) {';
                 echo 
'        msg.innerHTML = message;';
                 echo 
'}';
                 echo 
'</script>';
                 echo 
"\r\n\r\n";
        }
}
?>
Das ist ersteinmal die Klasse die ich habe - vollgespickt mit JavaScript. Zum testen verwende ich derzeit folgende Syntax:
PHP-Code:
<?php
$progress 
= new progress;

echo 
'<div id="progress">0%</div>';
echo 
'<div id="msglabel">Text</div><br /><br />';
echo 
"\r\n\r\n";
$progress -> writeJS();


function 
send($email) {
    global 
$progress;
    echo 
"Sende E-Mail an $email ... OK<br>";
    
$progress->setMessage("Sende E-Mail an $email ...");
    
sleep(1);
}

for (
$i=1;$i<=100;$i++) {
    if (
$i==10send('paulmueller@domain.de');
    if (
$i==20send('lisa@springfield.de');
    if (
$i==30send('donald@entenhausen.de');
    if (
$i==40send('marketing@firma.de');
    if (
$i==50send('dr.peter@arzt.de');
    if (
$i==60send('schueler@schule.de');
    if (
$i==70send('lehrer@schule.de');
    if (
$i==80send('niemand@world.de');
    if (
$i==90send('xxx@yyy.de');
    
$progress->setPercent($i);
}
?>
Normalerweise sollte jedesmal, wenn setPercent() aufgerufen wird, der Inhalt an den Browser gegeben werden (durch flush() ). Nur leider funktioniert das nicht so wie ich möchte, er aktualisiert nur in folgenden Schritten:
Zitat:
Schritt 1:
Fortschritt: 20 %
Sende E-Mail an lisa@springfield.de ...

Hier fehlt ja schoneinmal der Durchlauf von 0-20%..
Die nächste Anzeige ist:
Fortschritt: 43 %
Sende E-Mail an marketing@firma.de ...

Fortschritt: 66 %
Sende E-Mail an schueler@schule.de ...

Fortschritt: 89 %
Sende E-Mail an niemand@world.de ...

Fortschritt: 100 %
Sende E-Mail an xxx@yyy.de ...
Folgendes hatte ich auch einmal versucht, um herauszufinden, ob es nur an den (fehlerhaften?) Sleeps liegt:
PHP-Code:
<?php
for ($i=1;$i<=100;$i++) {
    
sleep(1);
    
flush();
    if (
$i==10send('paulmueller@domain.de');
    if (
$i==20send('lisa@springfield.de');
    if (
$i==30send('donald@entenhausen.de');
    if (
$i==40send('marketing@firma.de');
    if (
$i==50send('dr.peter@arzt.de');
    if (
$i==60send('schueler@schule.de');
    if (
$i==70send('lehrer@schule.de');
    if (
$i==80send('niemand@world.de');
    if (
$i==90send('xxx@yyy.de');
    
$progress->setPercent($i);
}
?>
Jedoch bringt das den gleichen Effekt wie oben beschrieben.
Wo liegt mein Fehler? Warum läuft der Prozentzähler nicht so durch, wie ich es möchte?
__________________
http://www.ChrisDiary.De

Geändert von Chr!s (27.09.2005 um 22:03 Uhr).
Chr!s ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem mit meiner mysql class Stefan125 PHP-Programmierung 13 20.09.2007 22:45
Problem mit Beispiel aus "How To Use BoxLayout" von SUN Ben Allgemeine Java-Programmierung 2 02.03.2006 14:39
Problem mit class Garnele PHP-Programmierung 12 12.10.2005 17:05
Problem mit getText()-Methode Paule Allgemeine Java-Programmierung 5 19.03.2005 20:38
Problem mit Zugriff von externer class auf Panel Treter_Peter Desktop-Applikationen und Grafik 2 24.12.2004 13:22


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:57 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

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 39 40 41 42 43 44