Ist es möglich eine Art Statusanzeige (Fortschritt) anzeigen zu lassen.

Thomas_Jung

Erfahrenes Mitglied
Hallo
Ich möchte ca 600.000 Datensätze aktualisieren.
Ist es möglich eine Art Statusanzeige (Fortschritt) anzeigen zu lassen.

Sie darf aber nicht im while($data = mysql_fetch_array($sql)) { } stehen.

echo "Datensatz 1 von 600000 wurde aktualisiert ";

$sql = mysql_query("SELECT * FROM tabelle");
while($data = mysql_fetch_array($sql)) {
$update = mysql_query("UPDATE tabelle Set status = ' ' ");
}
gruß
Thomas
 
Solange du nicht für jeden Datensatz die Seite neu aufrufen lassen möchtest, ist dies in PHP nicht möglich, vielleicht JS, aber nunja, ob das so machbar ist, keine Ahnung.
 
Jau! Geht in Verbindung mit Javascript (lange her, dass ich das mal gemacht habe, daher nur keine Garantie auf richtigen Code - nur ein Denkanstoß..)

1) Gib eine HTML-Seite aus, u.a. mit einem Formular und einem (oder mehrere) "input type=text" mit Namen(!), etwa so:
HTML:
<INPUT TYPE=text NAME=progress SIZE=20 STYLE=font-family: Arial; font-size: 8pt; border: 1 solid #000080>

2) Nachdem die HTML-Seite mit </html> geschlossen wurde kannst Du mit folgender PHP-Zeile den Text in dem input-type Dings ändern:
PHP:
$msg = "200 von 600.000 fertig";
echo "<SCRIPT>document.form.progress.value=\"$msg\";</SCRIPT>\n";

Achtung: Mit jeder neuen Ausgabe wächst die HTML um eine Zeile! Wenn Du jeden geänderten Datensatz als Fortschritt ausgibst hast Du hinterher 600.000 Zeilen - ob das der Browser mitmacht wage ich zu bezweifeln. Und wenn pro Sekunde zu viele Ausgaben kommen friert der Browser ein und die CPU Auslastung steigt auf 100%.

Also bau entschprechenden Code ein, so dass nur etwa jede Sekunde eine Ausgabe erfolgt!

Viel Glück (hoffe ich habe keinen Fehler gemacht)

Nochmal zum Verständnis der komplette Code, wie er an den Browser geschickt wird (nur die wichtigsten Zeilen):
HTML:
<HTML>
<HEAD>
<TITLE>Whatever</TITLE>
</HEAD>

<BODY>
<FORM METHOD=POST NAME=form>
<P ALIGN=left><INPUT TYPE=text NAME=progress SIZE=20 STYLE=font-family: Arial; font-size: 8pt; border: 1 solid #000080></P>
</FORM>
</BODY>
</HTML>

<SCRIPT>document.form.source.value="1 von 3";</SCRIPT>
<SCRIPT>document.form.status.value="2 von 3";</SCRIPT>
<SCRIPT>document.form.status.value="3 von 3";</SCRIPT>
<SCRIPT>document.form.status.value="Fertig";</SCRIPT>
 
pdatrain hat gesagt.:
Jau! Geht in Verbindung mit Javascript (lange her, dass ich das mal gemacht habe, daher nur keine Garantie auf richtigen Code - nur ein Denkanstoß..)

1) Gib eine HTML-Seite aus, u.a. mit einem Formular und einem (oder mehrere) "input type=text" mit Namen(!), etwa so:
HTML:
<INPUT TYPE=text NAME=progress SIZE=20 STYLE=font-family: Arial; font-size: 8pt; border: 1 solid #000080>

2) Nachdem die HTML-Seite mit </html> geschlossen wurde kannst Du mit folgender PHP-Zeile den Text in dem input-type Dings ändern:
PHP:
$msg = "200 von 600.000 fertig";
echo "<SCRIPT>document.form.progress.value=\"$msg\";</SCRIPT>\n";

Achtung: Mit jeder neuen Ausgabe wächst die HTML um eine Zeile! Wenn Du jeden geänderten Datensatz als Fortschritt ausgibst hast Du hinterher 600.000 Zeilen - ob das der Browser mitmacht wage ich zu bezweifeln. Und wenn pro Sekunde zu viele Ausgaben kommen friert der Browser ein und die CPU Auslastung steigt auf 100%.

Also bau entschprechenden Code ein, so dass nur etwa jede Sekunde eine Ausgabe erfolgt!

Viel Glück (hoffe ich habe keinen Fehler gemacht)

Nochmal zum Verständnis der komplette Code, wie er an den Browser geschickt wird (nur die wichtigsten Zeilen):
HTML:
<HTML>
<HEAD>
<TITLE>Whatever</TITLE>
</HEAD>

<BODY>
<FORM METHOD=POST NAME=form>
<P ALIGN=left><INPUT TYPE=text NAME=progress SIZE=20 STYLE=font-family: Arial; font-size: 8pt; border: 1 solid #000080></P>
</FORM>
</BODY>
</HTML>

<SCRIPT>document.form.source.value="1 von 3";</SCRIPT>
<SCRIPT>document.form.status.value="2 von 3";</SCRIPT>
<SCRIPT>document.form.status.value="3 von 3";</SCRIPT>
<SCRIPT>document.form.status.value="Fertig";</SCRIPT>


Hallo pdatrain

Hat super geklappt vielen Dank
:p :p :p
Gruß Thomas
 
Zurück