You are not logged in.

  • Login

1

Monday, February 16th 2009, 11:39pm

Upload Status Anzeige

Hallo,

bin neu hier und eigentlich wegen einer einzigen Frage hier. Aber wie es hier aussieht, werde ich wohl öfter vorbei schauen. ^^

Habe ein Problem mit Upload Status Anzeige. Habe den Artikel per google gefunden: Upload Fortschritt mit PHP + AJAX

Habe den Code entsprechend angepasst (Pfade etc)

Mein Problem ist, die function ajax wird nur einmal ausgeführt. Wenn ich Upload starte, wird mir am Anfang i-ein Wert angezeigt. Dieser Wert wird jedoch nach 750 Millisekunden nicht verändert, wie es eigentlich der Fall sein sollte.

Ich habe schon den Funktionsaufruf (timeout) in die Funktion selbst reingepackt. Jedoch kriege ich beim zweiten Aufruf Division by zero raus (anscheinend ist die ID nicht mehr gültig oder so)

Mein Code:

mp3_upload.php

HTML Code

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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" xml:lang="de">
<head>
	<script type="text/javascript">
	//<![CDATA[
	function ajax(uid) {
		var req;
	 	try {
			req = window.XMLHttpRequest?new XMLHttpRequest(): 
				new ActiveXObject("Microsoft.XMLHTTP"); 
		} catch (e) {
			//Kein AJAX Support
		}
 
		req.onreadystatechange = function() {
			if ((req.readyState == 4) && (req.status == 200)) { 
				document.getElementById("status").innerHTML = req.responseText;
			}
		}
		req.open('GET', 'content/mp3_upload_status.php?uid='+uid);
		req.send(null);
		alert(document.mp3_upload_form.APC_UPLOAD_PROGRESS.value);
		//setTimeout('ajax(\''+document.getElementsByName('APC_UPLOAD_PROGRESS').value+'\')', 750);
	}
	//]]>
	</script>
</head>
<body>
	<iframe src="content/mp3_upload_submit.php" name="hidden_upload" style="display:none"></iframe>
	<div id="status"></div>
 	<form action="index.php?page=mp3_upload_submit" target="hidden_upload" method="post" name="mp3_upload_form" enctype="multipart/form-data">
		<input type="hidden" name="APC_UPLOAD_PROGRESS" value="<? echo uniqid();?>"/>
		<input type="file" name="upload" />
		<input type="submit" onclick="this.disabled=true; setTimeout('ajax(\''+this.form.APC_UPLOAD_PROGRESS.value+'\')', 750); "/>
	</form>
</body>
</html>


mp3_upload_status.php

PHP Quellcode

1
2
3
$arr = apc_fetch("upload_{$_GET['uid']}");
	//printf("<pre>%s</pre>", print_r($arr,true));
	print(round(($arr['current']*100)/$arr['total'],1)."% uploaded");


Diese Dateien liegen im Ordner content und werden in die index.php (liegt in übergeordneten Ordner) includet

würde mich freuen, wenn jemand den Fehler findet

mit freundlichen Grüßen ^^

2

Tuesday, February 17th 2009, 9:43pm

Hi,
da gibts mehrere mögliche Fehlerquellen die man erstmal ausschließen muss:
1. klappt der Upload überhaupt? Hast du den Iframe mal sichtbar gemacht?
2. ist APC installiert? PHP APC Installation Linux
3. installier die mal Firebug und schau in der Konsole ob der AJAX Request ausgeführt wird.

3

Tuesday, February 17th 2009, 9:55pm

1. noch nicht gemacht, melde mich nach dem test
2. ja. ist auch in info drin und apc_fetch ist bekannt
3. mache ich, bin aber sicher dass er ausgeführt wird. weil ich habe schon req.responsetext oder so schon mal mit alert ausgegeben und da stand das richtige drin.
und einmal wird die % zahl angezeigt. nur wiederholt wird die berechnung nicht

bin grad mal am uplaod/iframe testen

Moderator: Bitte keine Direktzitate!

4

Tuesday, February 17th 2009, 10:00pm

achso, es geht nur um die Wiederholung?
Wenn ich deinen Aufruf korrigiere, musst du das machen: setTimeout("ajax("+uid+")", 750);

Aber versuchs mal bitte mit setInterval() - das ist besser als Timeout

HTML Code

1
<input type="submit" onclick="this.disabled=true; setInterval('ajax(\''+this.form.APC_UPLOAD_PROGRESS.value+'\')', 750); "/>

5

Tuesday, February 17th 2009, 11:14pm

wunderbar, es funktioniert!!!

Wäre vllt besser wenn Du es im Tut auch veränderst. setTimeout führt ja die Funktion nur einmal auf nach dem "onclick" aus
setInterval wiederholt die. dann braucht man es nicht explicit in der funktion selbst noch einmal aufrufen.

und division bei zero war, denke ich mal, weil settimeout upload stoppte und dann alles auf 0 gesetzt wurde bei dem fille

funktioniert einwandfrei

Vielen Dank Dir. Werde mich auch nützlich machen wo ich kann ^^

Liebe Grüße :thumbsup:

Moderator: Bitte keine Direktzitate!

Similar threads

Social bookmarks