2010-09-10 99 views
0

我是一個JavaScript的人太深入php(即使這個問題不深)。不能通過參數在PHP中

我在URL中傳遞兩個不同的變量從文件到文件。一個橫跨罰款,而另一個沒有。

我有2個文件。 upload.php和uploadfiles.php。

該參數有助於構建文件上傳到的目的地。

這兩個參數是「memberId」和「fileType」。

這裏是我將params傳遞給uploadfiles.php的地方,這段代碼位於upload.php上。

它在兩個地方。一個用於表單的隱藏輸入,另一個作爲var傳遞給Flash腳本。

在形式:

<input name="uploadscript" id="uploadscript" type="hidden" value="/flashuploader/FileProcessingScripts/PHP/uploadfiles.php?memberId=<?php echo $_REQUEST["memberId"] ?>&fileType=<?php echo $_REQUEST["fileType"] ?>" /> 

在JS:

uploadUrl: '/flashuploader/FileProcessingScripts/PHP/uploadfiles.php?memberId=<?php echo $_REQUEST["memberId"] ?>&fileType=<?php echo $_REQUEST["fileType"] ?>' 

我已經在upload.php的是$ _REQUEST [ 「文件類型」]確實有正確的值進行測試。

然後我檢索PARAMS上uploadfiles.php像這樣:

$uploaddir=realpath(dirname(__FILE__) . '/../../../memberimages/') . '/'.$_REQUEST["memberId"].'/My_Files/'.$_REQUEST["fileType"].'/'; 

帕拉姆「成員」工作正常,但「文件類型」是空的。我敢肯定,這與我在upload.php中通過php添加參數的方式有關,但我沒有想法。

這裏是html製作並由upload.php返回。您可以看到44和80行上的值看起來是正確的:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

<script type="text/javascript"> 

    function mysubmit(type) 
    { 
     if(document.getElementById("uploadscript").value=='') 
     { 
     window.alert('Enter upload processing script file name!'); 
     return false; 
     } 
     if(type=='flash') 
     {   
     MultiPowUpload.uploadAll(document.getElementById("uploadscript").value); 
     document.getElementById("server_reply").value=""; 
     } 
     else 
     { 
     var FormObj = document.getElementById("myform"); 
     FormObj.action = document.getElementById("uploadscript").value; 
     return true; 
     } 
    } 

    function MultiPowUpload_onComplete(type, index, serverResponse) 
    { 
     var reply; 
     reply = document.getElementById("server_reply"); 
     reply.value += "\nReply for file: " + MultiPowUpload.fileList()[index].name + "\r\n" + serverResponse + "\n"; 
    } 
    var fileType = 'Video'; 
    function MultiPowUpload_onCompleteAbsolute(type, uploadedBytes) 
    { 
     if (fileType == 'Video'){ 
      parent.loadUserVideos(); 
     } else if (fileType == 'Images') { 
      parent.loadUserImages(); 
     } 
    } 

    </script> 

<div style="margin-top: -20px"> 
<input name="uploadscript" id="uploadscript" type="hidden" value="/flashuploader/FileProcessingScripts/PHP/uploadfiles.php?memberId=43&fileType=Video" /> 
<table width="380" cellpadding="0" cellspacing="0"> 
    <tr> 
     <td style="position: relative;"> 
     <div id="MultiPowUpload_holder" style="margin-top: 20px"> 
     <table width="380" cellpadding="0" cellspacing="0"> 
     <tr> 
      <td> 
      <form id="myform" onSubmit="return mysubmit();" 
       enctype="multipart/form-data" action="" method="POST"> 
      <table width="100%" border="0" cellspacing="0" cellpadding="0"> 
       <tr> 
        <td width="106"><span 
        style="font-family: Arial, Helvetica, sans-serif; font-size: 12px">Select 
        file:</span></td> 
        <td width="294"><input name="Filedata" type="file" /></td> 
       </tr> 
      </table> 
      <br> 
      <input type="submit" value="Upload File" /></form> 
      </td> 
     </tr> 
     </table> 
     </div> 
     <!-- <img src="/images/ajax-loader.gif" style="position:absolute; top:40%; left:50%; margin-left:-110px;" /> --> 
     <!-- SWFObject home page: http://code.google.com/p/swfobject/ --> <script 
     type="text/javascript" src="/flashuploader/swfobject.js"></script> <script 
     type="text/javascript"> 
     var params = { 
      BGColor: "#FFFFFF" 
     }; 
     var attributes = { 
      id: "MultiPowUpload", 
      name: "MultiPowUpload" 
     }; 
     var flashvars = { 
      uploadUrl: '/flashuploader/FileProcessingScripts/PHP/uploadfiles.php?memberId=43&fileType=Video', 
      uploadButtonVisible: "Yes", 
      useExternalInterface: "Yes", 
      maxFileSize: "6024000", 
      maxFileCount: "20", 
      maxFileSizeTotal: "20480000", 
      backgroundColor: "#FFFFFF", 
      buttonTextColor: "#000000", 
      buttonBackgroundColor: "#F1F1F1", 
      buttonBottomBorderColor: "#E1E1E1", 
      buttonTopBorderColor: "#E1E1E1", 
      buttonDisabledBackgroundColor: "#FFFFFF", 
      buttonDisabledBottomBorderColor: "#DDDDDD", 
      buttonDisabledTopBorderColor: "#DDDDDD", 
      buttonDisabledTextColor: "#DDDDDD", 
      buttonRollOverBottomBorderColor: "#666666", 
      buttonRollOverTopBorderColor: "#666666", 
      buttonDownBottomBorderColor: "#000000", 
      buttonDownTopBorderColor: "#000000", 
      buttonDownBottomBackgroundColor: "#FFFFFF", 
      buttonDownTopBackgroundColor: "#FFFFFF", 
      listTextSelectedColor: "#000000", 
      listTextRollOverColor: "#333333", 
      listRollOverColor: "#DDDDDD", 
      listDownColor: "#EEEEEE", 
      listSelectedUpColor: "#EEEEEE", 
      listSelectedRollOverColor: "#D2D2D2", 
      listUnuploadedColor: "#777777", 
      listUploadedColor: "#FFFFFF", 
      progressBarLeftColor: "#BBBBBB", 
      progressBarRightColor: "#AAAAAA", 
      progressBarLeftBorderColor: "#E1E1E1", 
      progressBarRightBorderColor: "#E1E1E1", 
      textColor: "#FFFFFF" 
     }; 
     swfobject.embedSWF("/flashuploader/ElementITMultiPowUpload2.1.swf", "MultiPowUpload_holder", "380", "270", "9.0.0", "/flashuploader/expressInstall.swf", flashvars, params, attributes); 

    </script></td> 
    </tr> 
</table> 
</div> 
</body> 

感謝您的幫助!

+2

你能粘貼從upload.php生成的html嗎?確保變量正確放入uploadUrl JS變量中。 – Ollie 2010-09-10 22:43:36

+2

不允許網站訪問者將自己的字符串注入到您的html輸出或文件路徑中。放置'$ _REQUEST'變量可以導致XSS,欺騙,任意執行等更多 – webbiedave 2010-09-10 22:52:38

+0

@Ollie:完成。 @ webbiedave:它沒有用戶輸入。我傳遞memberId和fileType,以便上傳到正確的位置,具體取決於我使用的上傳器。例如圖片或視頻 – UpHelix 2010-09-10 22:56:50

回答

0

我解決了這個問題,只把URL變成了一個參數。我將它作爲uploadfiles.php的一個參數傳遞(驗證它只是字符串和可接受的數據後)。出於某種原因,PHP不喜歡多個參數。

0

我覺得所以在你的代碼(uploadfile.php)一個非常基本的錯誤...你試圖從$ _REQUEST錯誤的參數檢索..

從你逝去的隱藏提交的HTML作爲「uploadscript」,你試圖得到$ _REQUEST [「fileType」] & $ _REQUEST [「memberId」]不退出..(我不知道你是如何獲得memberID,除非它以某種方式存在於POST中或其他..

$uploaddir=realpath(dirname(__FILE__) . '/../../../memberimages/') . '/'.$_REQUEST["memberId"].'/My_Files/'.$_REQUEST["fileType"].'/'; 

要麼,

  1. (首選),並將其作爲單獨的參數,只要你想他們uploadfile.php 或
  2. 收到了$ _REQUEST [「uploadscript在」],然後爆炸,並在其上工作...(小白方式)

此外,您的HIDDEN字段如何在FORM標籤之外!

<input name="uploadscript" id="uploadscript" type="hidden" value="/flashuploader/FileProcessingScripts/PHP/uploadfiles.php?memberId=43&fileType=Video" /> 

希望有幫助。

+0

1.隱藏字段由其id通過js onsubmit引用,不需要在裏面,但我不妨將其移動。在目前我正在測試的情況下,我不使用表格,我使用閃光燈。該表格是非Flash用戶的備份。 2.當我加載upload.php時,這些參數會傳到它的url中,然後將它們添加到uploadfiles.php的url中,當用戶使用flash提交表單時調用它。 – UpHelix 2010-09-10 23:41:41

+0

@Dale:好的。它是否爲非Flash用戶發佈?你的JS函數提交需要一個參數,你沒有通過表單onsubmit函數傳遞。讓我知道這是否是發佈任務時的錯字,以便我們可以有不同的想法......謝謝 – Accilies 2010-09-23 00:13:20

+0

是的,它使用正常形式,但它與java表單有相同的概率。無論如何,接受的解決方案解決了這個問題。 – UpHelix 2010-09-27 17:35:12