php表单进度条不起作用

时间:2013-01-13 23:31:35

标签: php html

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

<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);

uploadprogress.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';
?>

谢谢。

1 个答案:

答案 0 :(得分: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中的time参数。你需要包含它。在console.log中弹出或在setFunction中弹出一个警告,以帮助您查看该函数被调用的频率。