-2

有人可以在此代码中发现错误,它没有显示上传进度。

<form action="upload.php" method="post" enctype="multipart/form-data">
<center><p> <input type='file' id='upload_id' size='58' style='height: 30px; font-size: 18px' name='filename'></p>
<input type='image' src='<?php echo $menu_upload_button; ?>' onclick="function set() { f=document.getElementById('progress_iframe'); f.style.display='block'; f.src='uploadprogress.php?id=<?=$upload_id?>';} setTimeout(set);">
<iframe id="progress_iframe" src="" style="display:none;" scrolling="no" frameborder="0"></iframe>
</form>

输入的函数是这样的:

function set() { 
   f=document.getElementById('progress_iframe'); 
   f.style.display='block'; 
   f.src='uploadprogress.php?id=<?=$upload_id?>';
} 
setTimeout(set);

上传进度.php:

<META HTTP-EQUIV='REFRESH' CONTENT='1;URL=?id=<?=$_GET['id']?>'>
Upload progress:<br />
<?php
    if(!$_GET['id']) die;
    $info = uploadprogress_get_info($_GET['id']);
    $kbytes_total = round($info['bytes_total'] / 1024);
    $kbytes_uploaded = round($info['bytes_uploaded'] / 1024);
    echo $kbytes_uploaded.'/'.$kbytes_total.' KB';
?>

谢谢你。

4

1 回答 1

1

对于初学者,我建议您在 HTML 中使用 $_GET['id'] 进行返工,因为这是安全漏洞的载体(点击该 URL 并传递一些讨厌的东西)。也许检查一个整数并以这种方式清理来自 $_GET['id'] 的响应。

另外,如果我可以建议,如果您连接到消除 iframe 的同一站点,因为您可以通过 ajax 更新页面上的适当元素,而无需使用 iframe(这将更快、更高效,如它不必每次都加载整页)。

但是,如果您保留此方法,您的 javascript 函数将永远不会在您的页面上结束,因为您的超时函数永远不会结束。你可以这样做:

var timer = setTimeout(
clearTimeout(timer);

一个快速的猜测是uploadprogress.php 在不同的目录中,你给它一个相对的URL,而不是一个完整的URL。尝试切换它(如果它在您服务器上的 htdocs/foo/bar 目录中,请将其设置为 /foo/bar/uploadprogress.php

最后,setTimeout 中的时间参数是必需的。你需要包括它。在您的 setFunction 中弹出 console.log 或警报,以帮助您查看该函数被调用的频率。

于 2013-01-13T23:49:00.030 回答