2009-09-16 80 views
0

我有这个JavaScript代码文件上传到我的服务器(将其命名为“upload.js”):来自外部.php文件的PHP变量,JavaScript内部?

function startUpload(){ 
    document.getElementById('upload_form').style.visibility = 'hidden'; 
    return true; 
} 

function stopUpload(success){ 
    var result = ''; 
    if (success == 1){ 
     result = '<div class="correct_sms">The file name is [HERE I NEED THE VARIABLE FROM THE EXTERNAL PHP FILE]!</div>'; 
    } 
    else { 
     result = '<div class="wrong_sms">There was an error during upload!</div>'; 
    } 
    document.getElementById('upload_form').innerHTML = result; 
    document.getElementById('upload_form').style.visibility = 'visible'; 
    return true; 
} 

而且我已经得到了处理上载有重命名上传的文件(一个简单的PHP文件我把它命名为“process_file.php”),并与upload.js再次连接到获取结果:

<?php 
    $file_name = $HTTP_POST_FILES['myfile']['name']; 

    $random_digit = rand(0000,9999); 

    $new_file_name = $random_digit.$file_name; 

    $path= "../../../images/home/smsbanner/pixels/".$new_file_name; 
    if($myfile !=none) 
    { 
     if(copy($HTTP_POST_FILES['myfile']['tmp_name'], $path)) 
     { 
      $result = 1; 
     } 
     else 
     { 
      $result = 0; 
     } 
    } 
    sleep(1); 
?> 

<script language="javascript" type="text/javascript">window.top.window.stopUpload(<?php echo $result; ?>);</script> 

我需要的是内部upload.js以可视化的上传文件的新名称,如果上传的答案过程是否正确?我在上面的JavaScript代码中编写了需要将新名称答案的地方。

回答

4

您必须将您的代码更改为以下内容。

<?php 
    $file_name = $HTTP_POST_FILES['myfile']['name']; 

    $random_digit=rand(0000,9999); 

    $new_file_name=$random_digit.$file_name; 

    $path= "../../../images/home/smsbanner/pixels/".$new_file_name; 
    if($myfile !=none) 
    { 
     if(copy($HTTP_POST_FILES['myfile']['tmp_name'], $path)) 
     { 
      $result = 1; 
     } 
     else 
     { 
      $result = 0; 
     } 
    } 
    sleep(1); 
?> 

<script language="javascript" type="text/javascript">window.top.window.stopUpload(<?php echo $result; ?>, '<?php echo "message" ?>');</script> 

而且你的JavaScript代码,

function stopUpload(success, message){ 
    var result = ''; 
    if (success == 1){ 
     result = '<div class="correct_sms">The file name is '+message+'!</div>'; 
    } 
    else { 
     result = '<div class="wrong_sms">There was an error during upload!</div>'; 
    } 
    document.getElementById('upload_form').innerHTML = result; 
    document.getElementById('upload_form').style.visibility = 'visible'; 
    return true; 
} 
+0

好,我替换了它们,但一切都停止了。我可能不得不用我的php文件中的“消息”来代替。但是有什么,以及如何? – Spoonk 2009-09-16 13:46:08

+0

我真的不明白你的意思是什么?我不知道你需要展示什么? PS:谢谢我添加了引号。 – RageZ 2009-09-16 13:51:15

+0

谢谢你,你的解决方案在亚历克斯B – Spoonk 2009-09-16 13:58:35

1

哑的人曾经说过; “没有愚蠢的问题,只有愚蠢的答案”。虽然他错了,实际上有很多愚蠢的问题,但这不是其中之一。

除此之外,您在声明.js正在上传文件。这不是真的。 我敢打赌,你没有发布你的所有代码。

可以让PHP和JavaScript在这个问题上通过使用Ajax,我建议使用jQuery框架来做到这一点,主要是因为它具有易于使用的功能为Ajax一起工作,而且还因为它具有出色的文档。

2

RageZ的回答只是什么我要发布,但要更具体一点,你的PHP文件的最后一行应该是这样的:

JavaScript的错误,而不引号第二个参数,我假设$ new_file_name是你想传入的。为了安全起见,你可能甚至想要转义文件名(我认为在这种情况下addslashes将工作)。

0

如何延伸回调脚本:(和addslashes和引号是必要的,使PHP串出来编码成JavaScript字符串字面)

window.top.window.stopUpload(
    <?php echo $result; ?>, 
    '<?php echo(addslashes($new_file_name)); ?>' 
); 

然后添加一个“文件名'参数给stopUpload()函数,并在HTML中吐出。

$new_file_name=$random_digit.$file_name; 

对不起,这不足以使文件名安全。 $file_name可能包含像'x /../../ y'或其他各种非法或不一致支持的字符。文件名清理比看起来更难;你最好制作一个全新的(随机)文件名,而不是完全依赖用户输入。