2009-12-14 73 views
1

的代碼如下所示:PHP上傳文件

HTML

<form action="contact.php" method="post" enctype="multipart/form-data" onsubmit="return Validare();"> 

    <input type="text" name="nume" value="Nume" class="contact" id="Nume" onclick="if(this.value=='Nume')this.value='';" onblur="if(this.value.replace(/^\s+|\s+$/g,'')=='')this.value='Nume'" /><font color="red">*</font><br /> 
      <input type="text" name="email" value="Email" class="contact" id="Email" onclick="if(this.value=='Email')this.value='';" onblur="if(this.value.replace(/^\s+|\s+$/g,'')=='')this.value='Email'" /><font color="red">*</font><br /> 
      <input type="text" name="telefon" value="Telefon" class="contact" id="Telefon" onclick="if(this.value=='Telefon')this.value='';" onblur="if(this.value.replace(/^\s+|\s+$/g,'')=='')this.value='Telefon'" /><br /> 
      <textarea name="mesaj" rows="10" class="contact" id="Mesaj" onclick="if(this.value=='Mesaj')this.value='';" onblur="if(this.value.replace(/^\s+|\s+$/g,'')=='')this.value='Mesaj'">Mesaj</textarea> 

<input type="file" name="file[]" /> 
<input type="file" name="file[]" /> 
<input type="file" name="file[]" /> 
<input type="submit" value="Trimite" /> 
</form> 

PHP

for($i=0; $i<3; $i++){ 
if($_FILES["file"]["size"][$i] > 0){ 
    $rand = rand(10000, 99999); 
    $name = $rand.rand(10000, 99999).$_FILES["file"]["name"][$i]; 
      $tmp_name = $_FILES["file"]["tmp_name"][$i]; 
    $target_path_big = "http://biroutraduceri.net/fisiere/".$name; 
    move_uploaded_file($tmp_name, "fisiere/".$name); 
} 
} 

的JavaScript

<script> 
function Validare(){ 
    if(document.getElementById("Nume").value.replace(/^\s+|\s+$/g,'') == "" || document.getElementById("Nume").value.replace(/^\s+|\s+$/g,'') == "Nume"){ 
     alert("Numele nu este valid!"); 
     return false; 
    } 
    if(document.getElementById("Email").value.replace(/^\s+|\s+$/g,'') == "" || document.getElementById("Email").value.replace(/^\s+|\s+$/g,'') == "Email"){ 
     alert("Email-ul nu este valid!"); 
     return false; 
    } 
    if(document.getElementById("Mesaj").value.replace(/^\s+|\s+$/g,'') == "" || document.getElementById("Mesaj").value.replace(/^\s+|\s+$/g,'') == "Mesaj"){ 
     alert("Mesajul nu este valid!"); 
     return false; 
    } 
    return true; 
} 
</script> 

當我按下提交沒有發生。該文件未上傳。

我在哪裏錯了?

+3

可以嗎發貼'Validare()'呢?它應該返回true以讓表單提交。 – catchmeifyoutry 2009-12-14 20:27:43

+0

Validare()返回true。我測試過了。 – Emanuel 2009-12-14 20:33:41

+0

$ tmp_name = $ _FILES [「file」] [「tmp_name」] [$ i]; 這是來自for循環。 – Emanuel 2009-12-14 20:36:27

回答

0

可能是一個權限問題,你的腳本有權在寫「fisiere /".$名稱是」 fisiere /".$名字真的,你覺得這是什麼?您可能想要使用絕對路徑。

編輯:您不能將圖像寫入到一個HTTP URL,你需要將它寫入到本地文件路徑,你需要確保PHP有權限寫入該路徑/目錄

+0

我已經嘗試使用「http:// url/fisiere /」; 。 $名稱,但沒有。 – Emanuel 2009-12-14 20:53:29

-1

我猜onsubmit="return Validare();"是你爲什麼要使用此rand函數反正返回false

,嘗試時間()它的更好,我認爲

+0

請勿使用time()。他正在使用rand()函數嘗試獲取僞隨機數。如果你使用time(),你不會得到這個,因爲可以在給定的秒鐘內上傳多個文件。 – Brad 2009-12-14 20:30:56

-1

你想$_FILES['file'][$i]['size']

+1

對不起,但那是錯誤的:http://www.php.net/manual/en/features.file-upload.multiple.php – Powerlord 2009-12-14 20:31:08

1

$ tmp_name的值永遠不會初始化爲任何事情。

$ tmp_name應設置爲等於$ _FILES ['file'] ['tmp_name'] [$ i];

+0

2。是不正確的:http://www.php.net/manual/en/features.file-upload.multiple.php – 2009-12-14 20:36:04

+0

@Lucas你指的是哪一部分? – 2009-12-14 20:48:00

+0

這是我刪除的評論。 – Brad 2009-12-14 20:50:23

0

你真的不需要onsubmit =「return Validare();」甚至寫錯了。 和move_uploaded_file($ _ FILES ['file'] ['tmp_name'],$ target_path))是您正確的代碼

+0

您仍然需要$ _FILES ['file'] ['tmp_name']末尾的索引,以便引用正確的文件。 – Brad 2009-12-14 20:35:07

+0

我需要這個onsubmit =「return Validare();」進行驗證。 – Emanuel 2009-12-14 20:35:18

+0

這是真實的,在大多數情況下是有效的,我同意:) – streetparade 2009-12-14 20:37:00

0

您忘了設置變量$ tmp_name。如在$tmp_name = $_FILES["file"]["tmp_name"][$i]; 否則,根據我自己的測試,似乎可以。

否則,在你的「for」循環之前加入一個print_r($_FILES);,再在你的循環內打印幾張和一個is_readable($tmp_name)檢查,以更精細地試圖找出問題的根源。

+0

in echo is_readable($ tmp_name);它顯示1. – Emanuel 2009-12-14 20:43:27

2

您的PHP代碼有錯誤,$ tmp_name從不設置。

更正代碼

for($i=0; $i<3; $i++){ 
    if($_FILES["file"]["size"][$i] > 0){ 
     $rand = rand(10000, 99999); 
     $name = $rand.rand(10000, 99999).$_FILES["file"]["name"][$i]; 
     $target_path_big = "http://biroutraduceri.net/fisiere/".$name; 
     move_uploaded_file($_FILES["file"]["tmp_name"][$i], "fisiere/".$name); 
    } 
} 
+0

問題不在那裏。 – Emanuel 2009-12-14 21:13:14

+0

並且是目標目錄「is_writeable」?連同所有必需的unix文件權限? 例如,該目錄可以被chmoded爲0775「rwxrwxr-x」,並將組設置爲「www」或「apache」(或任何PHP進程運行的)。 – DrYak 2009-12-16 14:55:55