2013-03-22 2 views
1

Я думаю, что у меня есть форма, которую я хочу использовать, чтобы пользователи могли загружать файлы, и когда они нажимают кнопку «Отправить», он отправляет файл кому-либо. У меня это работает для одного файла.отправка многопользовательских вложений с помощью php

См код

<html> 
<head> 
    <title>Administration - upload new files</title> 
</head> 
<body> 
<h1>Upload new news files</h1> 
<form enctype="multipart/form-data" action="upload.php" method="post"> 
    <input type="hidden" name="MAX_FILE_SIZE" value="1000000"> 
    Upload this file: <input name="userfile" type="file"> 

    <input type="hidden" name="MAX_FILE_SIZE" value="1000000"> 
    Upload this file: <input name="userfile" type="file"> 
    <input type="submit" value="Send File"> 
</form> 
</body> 
</html> 

и

<html> 
<head> 
    <title>Uploading...</title> 
</head> 
<body> 
<h1>Uploading file...</h1> 
<?php 
$youremail = "[email protected]"; 
$tmp_name = $_FILES['userfile']['tmp_name']; 
    $type = $_FILES['userfile']['type']; 
    $name = $_FILES['userfile']['name']; 
    $size = $_FILES['userfile']['size']; 
    if (file_exists($tmp_name)) 
     { 
     if(is_uploaded_file($tmp_name)) { 
      $file = fopen($tmp_name,'rb');   //open the file 
       $data = fread($file,filesize($tmp_name)); //read the file 
       fclose($file);     // close the file 
       $data = chunk_split(base64_encode($data)); // encode and split 
       } 
      $bound_text = "x".md5(mt_rand())."x"; 
      $bound = "--".$bound_text."\r\n"; 
      $bound_last = "--".$bound_text."--\r\n"; 
      $headers = "From: {$sendersname}<{$sendersemail}>\r\n" 
      ."MIME-Version: 1.0\r\n" 
       ."Content-Type: multipart/mixed; boundary=\"$bound_text\""; 
      $message .= "If you can see this MIME than your client doesn't accept MIME types!\r\n" 
       .$bound; 

      $message .= "Content-Type: text/html; charset=\"iso-8859-1\"\r\n" 
       ."Content-Transfer-Encoding: 7bit\r\n\r\n" 
       .$sendcontent."\r\n" 
       .$bound; 

      $message .= "Content-Type: ".$type."; name=\"".$name."\"\r\n" 
       ."Content-Transfer-Encoding: base64\r\n" 
       ."Content-disposition: attachment; file=\"".$name."\"\r\n" 
       ."\r\n" 
       .$data 
       .$bound_last; 
      } 

    mail($youremail, $subject, $message, $headers); 
    ?> 

Проблема приходит, когда я хочу, чтобы прикрепить более одного файла. И какой порядок я делаю по этому поводу, на первой странице я хочу его, чтобы при нажатии на файл attatch он добавит новый файл, а затем, когда он снова щелкнет, появится еще один и т. Д. Таким образом, форма динамически создается.

Это приведет меня к следующему вопросу, который будет отправлять вложения, поскольку мы не знаем, сколько пользователей подключено.

Все указатели, как им уверен, что его не будет столь же легко, как изменение если (file_exists ($ tmp_name) на некоторое время?

Большое спасибо заранее

Edit, так что теперь у меня есть

<form enctype="multipart/form-data" action="upload.php" method="post"> 
    <input type="hidden" name="MAX_FILE_SIZE" value="1000000"> 
    Upload this file: <input name="userfile[]" type="file"> 

    <input type="hidden" name="MAX_FILE_SIZE" value="1000000"> 
    Upload this file: <input name="userfile[]" type="file"> 
    <input type="submit" value="Send File"> 

и

<html> 
<head> 
    <title>Uploading...</title> 
</head> 
<body> 
<h1>Uploading file...</h1> 
<?php 
$youremail = "[email protected]"; 

$i = count($_FILES['userfile']); 


foreach($_FILES['userfile'] as $file){  
    $tmp_name = $file['tmp_name']; 
    $type = $file['type']; 
    $name = $file['name']; 
    $size = $file['size']; 


    if (file_exists($tmp_name)) 
     { 
     if(is_uploaded_file($tmp_name)) { 
      $file = fopen($tmp_name,'rb');   //open the file 
       $data = fread($file,filesize($tmp_name)); //read the file 
       fclose($file);     // close the file 
       $data = chunk_split(base64_encode($data)); // encode and split 
       } 
      $bound_text = "x".md5(mt_rand())."x"; 
      $bound = "--".$bound_text."\r\n"; 
      $bound_last = "--".$bound_text."--\r\n"; 
      $headers = "From: {$sendersname}<{$sendersemail}>\r\n" 
      ."MIME-Version: 1.0\r\n" 
       ."Content-Type: multipart/mixed; boundary=\"$bound_text\""; 
      $message .= "If you can see this MIME than your client doesn't accept MIME types!\r\n" 
       .$bound; 

      $message .= "Content-Type: text/html; charset=\"iso-8859-1\"\r\n" 
       ."Content-Transfer-Encoding: 7bit\r\n\r\n" 
       .$sendcontent."\r\n" 
       .$bound; 

      $message .= "Content-Type: ".$type."; name=\"".$name."\"\r\n" 
       ."Content-Transfer-Encoding: base64\r\n" 
       ."Content-disposition: attachment; file=\"".$name."\"\r\n" 
       ."\r\n" 
       .$data 
       .$bound_last; 
      } 
echo "$i"; 
     } 

    mail($youremail, $subject, $message, $headers); 


    ?> 

Он посылает электронную почту, но никакие приложения я ставлю $ i in, чтобы увидеть, что происходит, и его возвращение как 5 shoundn't, если бы было 2, если было всего 2 загрузки файлов?

ответ

2

Вы можете изменить свой входной файл, чтобы быть массивом, как это:

<input name="userfile[]" type="file"> 

Это добавит дополнительную глубину вашего $_FILES массива. Вы можете определить количество вложений, загруженных с помощью count($_FILES['userfile']). И петля через обеспеченные вложения с:

foreach($_FILES['userfile'] as $file) { 
    // Access the elements with: 
    // $file['name'] 
    // etc.. 
} 

Что касается нажатия на ссылку, чтобы создать произвольное число входов файлов, вам нужно будет использовать Javascript. Это можно сделать с помощью vanilla JS, но если вы используете jQuery, вы можете посмотреть на clone().

+0

Проводка больших блоков кода в комментарии никогда не будет работать хорошо. Если вы все еще боретесь, не стесняйтесь редактировать свои вопросы, и я могу отредактировать свой ответ соответственно. – juco

+0

спасибо, что редактировал вопрос – Greyhounddad

Смежные вопросы