Upload Status Anzeige

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 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: [wiki]Upload Fortschritt mit PHP + AJAX[/wiki]

    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

    Quellcode

    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    2. <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" xml:lang="de">
    3. <head>
    4. <script type="text/javascript">
    5. //<![CDATA[
    6. function ajax(uid) {
    7. var req;
    8. try {
    9. req = window.XMLHttpRequest?new XMLHttpRequest():
    10. new ActiveXObject("Microsoft.XMLHTTP");
    11. } catch (e) {
    12. //Kein AJAX Support
    13. }
    14. req.onreadystatechange = function() {
    15. if ((req.readyState == 4) && (req.status == 200)) {
    16. document.getElementById("status").innerHTML = req.responseText;
    17. }
    18. }
    19. req.open('GET', 'content/mp3_upload_status.php?uid='+uid);
    20. req.send(null);
    21. alert(document.mp3_upload_form.APC_UPLOAD_PROGRESS.value);
    22. //setTimeout('ajax(\''+document.getElementsByName('APC_UPLOAD_PROGRESS').value+'\')', 750);
    23. }
    24. //]]>
    25. </script>
    26. </head>
    27. <body>
    28. <iframe src="content/mp3_upload_submit.php" name="hidden_upload" style="display:none"></iframe>
    29. <div id="status"></div>
    30. <form action="index.php?page=mp3_upload_submit" target="hidden_upload" method="post" name="mp3_upload_form" enctype="multipart/form-data">
    31. <input type="hidden" name="APC_UPLOAD_PROGRESS" value="<? echo uniqid();?>"/>
    32. <input type="file" name="upload" />
    33. <input type="submit" onclick="this.disabled=true; setTimeout('ajax(\''+this.form.APC_UPLOAD_PROGRESS.value+'\')', 750); "/>
    34. </form>
    35. </body>
    36. </html>
    Alles anzeigen


    mp3_upload_status.php

    Quellcode

    1. $arr = apc_fetch("upload_{$_GET['uid']}");
    2. //printf("<pre>%s</pre>", print_r($arr,true));
    3. 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 ^^
  • 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? [coderwiki]http://www.coder-wiki.de/HowTos/PHP-APC-Installation-Linux[/coderwiki]
    3. installier die mal Firebug und schau in der Konsole ob der AJAX Request ausgeführt wird.
  • 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!
  • 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!