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.
Das ist ersteinmal die Klasse die ich habe - vollgespickt mit JavaScript. Zum testen verwende ich derzeit folgende Syntax:
Normalerweise sollte jedesmal, wenn setPercent() aufgerufen wird, der Inhalt an den Browser gegeben werden (durch flush() ). Nur leider funktioniert das nicht so wie ich moechte, er aktualisiert nur in folgenden Schritten:
Folgendes hatte ich auch einmal versucht, um herauszufinden, ob es nur an den (fehlerhaften?) Sleeps liegt:
Jedoch bringt das den gleichen Effekt wie oben beschrieben.
Wo liegt mein Fehler? Warum laeuft der Prozentzaehler nicht so durch, wie ich es moechte?
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";
}
}
?>
PHP-Code:
<?php
$progress = new progress;
echo '<div id="progress">0%</div>';
echo '<div id="msglabel">Text</div>
';
echo "\r\n\r\n";
$progress -> writeJS();
function send($email) {
global $progress;
echo "Sende E-Mail an $email ... OK
";
$progress->setMessage("Sende E-Mail an $email ...");
sleep(1);
}
for ($i=1;$i<=100;$i++) {
if ($i==10) send('paulmueller@domain.de');
if ($i==20) send('lisa@springfield.de');
if ($i==30) send('donald@entenhausen.de');
if ($i==40) send('marketing@firma.de');
if ($i==50) send('dr.peter@arzt.de');
if ($i==60) send('schueler@schule.de');
if ($i==70) send('lehrer@schule.de');
if ($i==80) send('niemand@world.de');
if ($i==90) send('xxx@yyy.de');
$progress->setPercent($i);
}
?>
Schritt 1:
Fortschritt: 20 %
Sende E-Mail an lisa@springfield.de ...
Hier fehlt ja schoneinmal der Durchlauf von 0-20%..
Die naechste 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 ...
Fortschritt: 20 %
Sende E-Mail an lisa@springfield.de ...
Hier fehlt ja schoneinmal der Durchlauf von 0-20%..
Die naechste 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 ...
PHP-Code:
<?php
for ($i=1;$i<=100;$i++) {
sleep(1);
flush();
if ($i==10) send('paulmueller@domain.de');
if ($i==20) send('lisa@springfield.de');
if ($i==30) send('donald@entenhausen.de');
if ($i==40) send('marketing@firma.de');
if ($i==50) send('dr.peter@arzt.de');
if ($i==60) send('schueler@schule.de');
if ($i==70) send('lehrer@schule.de');
if ($i==80) send('niemand@world.de');
if ($i==90) send('xxx@yyy.de');
$progress->setPercent($i);
}
?>
Wo liegt mein Fehler? Warum laeuft der Prozentzaehler nicht so durch, wie ich es moechte?
Kommentar