php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005-2

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.09.2005, 20:00  
Erfahrener Benutzer
 
Registriert seit: 27.10.2004
Beiträge: 1.093
PHP-Kenntnisse:
Fortgeschritten
Chr!s
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>

'
;
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==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 moechte, 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 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 ...
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 laeuft der Prozentzaehler nicht so durch, wie ich es moechte?
Chr!s ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 28.09.2005, 20:30  
Erfahrener Benutzer
 
Registriert seit: 05.07.2004
Beiträge: 1.476
DiBo33
Standard

Zitat:
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:
Im Browser sichtbar oder auch im generierten HTML-Output?
DiBo33 ist offline  
Alt 28.09.2005, 20:38  
Erfahrener Benutzer
 
Registriert seit: 27.10.2004
Beiträge: 1.093
PHP-Kenntnisse:
Fortgeschritten
Chr!s
Standard

Wie oben beschrieben, das sehe ich im Browser:
Zitat:
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 ...
Das sehe ich im Browser - die einzelnen Schritte, die NICHT im Browser angezeigt werden, stehen im Quelltext der Seite (rechtsklick..)
Chr!s ist offline  
Alt 28.09.2005, 20:45  
Erfahrener Benutzer
 
Registriert seit: 05.07.2004
Beiträge: 1.476
DiBo33
Standard

Zitat:
die NICHT im Browser angezeigt werden, stehen im Quelltext der Seite (rechtsklick..)
Genau, also läuft dein Script im Prinzip reibungslos durch.
Lediglich die Aktuallisierung im Browser ist nicht wie gewünscht sichtbar.

Aber das Verhalten liegt nicht am Script sondern ist vom jeweiligen Browser abhängig.

Was hier evtl. helfen kann ist ein geringer Timeout in JS zu setzen.

PHP-Code:
                         echo 'setTimeout(\'setPercent("'.$percent.'")\',20);'
Allerdings ohne Funktionsgarantie.
DiBo33 ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

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 an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Timestamp problem phrain PHP Tipps 2008 2 04.04.2008 09:41
Class Ausgabe Problem wk-moray PHP-Fortgeschrittene 6 12.02.2008 10:06
CSS - Problem mit class Smily0412 HTML, Usability und Barrierefreiheit 3 16.09.2006 14:59
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
Class Vars fmueller PHP Tipps 2006 10 14.02.2006 19:54
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
[OS|FreeGW] Class Problem ( cl_extended_database ) PHP Tipps 2006 20 08.02.2006 01:09
[Erledigt] wieder ein Problem bei phpmailer und smtp PHP Tipps 2006 24 07.02.2006 01:07
Mehrere Div-Layer per Class schliessen Diego1978 HTML, Usability und Barrierefreiheit 4 02.12.2005 12:10
Problem mit Sessions bei der Verwendung von flush (Php4) PHP-Fortgeschrittene 0 07.08.2005 00:36
[Erledigt] Problem mit Backslash Patrick Schwarz PHP Tipps 2005-2 5 26.07.2005 09:54
Problem mit "internen Variablen" ***GELÖST*** PHP Tipps 2004-2 6 07.12.2004 14:16
Smarty und PHP-Skript Problem PHP Tipps 2004-2 2 03.12.2004 22:27
PHP Upload (Master Value/Local Value Problem) PHP-Fortgeschrittene 5 23.11.2004 07:21
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php function progress, php flush() ladebalken, javascript browser progress, progress class

Alle Zeitangaben in WEZ +1. Es ist jetzt 13:54 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.