2009-09-16 132 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'或其他各種非法或不一致支持的字符。文件名清理比看起來更難;你最好製作一個全新的(隨機)文件名,而不是完全依賴用戶輸入。