Send multiple files via PHP

Asked

Viewed 264 times

-1

Hello! I set up a form in PHP, is sending to my email all right... The question is that I can’t configure the input for multiple files, just sending 1 file. Can anyone show me a light? Follows the way it is in the HTML and PHP file:

<input id="arquivo" name="arquivo" class="input-file" type="file"> 

/* Função que codifica o anexo para poder ser enviado na mensagem  */
if(file_exists($arquivo["tmp_name"]) and !empty($arquivo)){

    $fp = fopen($_FILES["arquivo"]["tmp_name"],"rb"); // Abri o arquivo enviado.
    $anexo = fread($fp,filesize($_FILES["arquivo"]["tmp_name"])); // Le o arquivo aberto na linha anterior
    $anexo = base64_encode($anexo); // Codifica os dados com MIME para o e-mail 
    fclose($fp); // Fecha o arquivo aberto anteriormente
    $anexo = chunk_split($anexo); // Divide a variável do arquivo em pequenos pedaços para poder enviar
    $mensagem = "--$boundary\n"; // Nas linhas abaixo possuem os parâmetros de formatação e codificação, juntamente com a inclusão do arquivo anexado no corpo da mensagem
    $mensagem.= "Content-Transfer-Encoding: 8bits\n"; 
    $mensagem.= "Content-Type: text/html; charset=\"utf-8\"\n\n";
    $mensagem.= "$corpo_mensagem\n"; 
    $mensagem.= "--$boundary\n"; 
    $mensagem.= "Content-Type: ".$arquivo["type"]."\n";  
    $mensagem.= "Content-Disposition: attachment; filename=\"".$arquivo["name"]."\"\n";  
    $mensagem.= "Content-Transfer-Encoding: base64\n\n";  
    $mensagem.= "$anexo\n";  
    $mensagem.= "--$boundary--\r\n"; 
}
    else // Caso não tenha anexo
    {
        $mensagem = "--$boundary\n"; 
        $mensagem.= "Content-Transfer-Encoding: 8bits\n"; 
        $mensagem.= "Content-Type: text/html; charset=\"utf-8\"\n\n";
        $mensagem.= "$corpo_mensagem\n";
}



/* Função que envia a mensagem  */
if(mail($to, $assunto, $mensagem, $headers))
{
    header("Location: /briefing/registration_send.php");
} 
    else
    {
        echo "<br><br><center><b><font color='red'>Ocorreu um erro ao enviar a mensagem!";
}
?>

1 answer

0

Only one input I believe it is not possible, but you can create several inputs by assigning the nameas a array and then you make a for inside it and up one file at a time, follows example.

<input name="arquivo[]" class="input-file" type="file">
<input name="arquivo[]" class="input-file" type="file">
<input name="arquivo[]" class="input-file" type="file">

The id by being unique you do not put or make a loop in php to place a counter at the end of the counter and take $_FILES using the name or id if so, how it goes as array you make a for thus.

/*Aqui você verifica se o file está setado */
if (isset($_FILES['arquivo'])){
  foreach ($_FILES['arquivo']["name"] as $file => $key) {
    /*Aqui você evita de tentar enviar inputs vazios */
    if (!empty($_FILES['arquivo']["name"][$file])) {
      /*RESTANTE DO SEU CÓDIGO AQUI*/
    }
  }
}

If you need something more dynamic you can add a button mais arquivos and for JavaScript or Jquery you add a new field with the same properties. ;)

  • Pts then... In this case the problem is that only one input would need to appear to add multiple files :/

  • Take a look at this link, it has tips on how to do this on html5, with a single input on the same idea of input as array and the attribute multiple in the input https://www.dicas-l.com.br/arquivo/html5_upload_de_varios_arquivos_com_apenas_um_input.php

  • Dude I tried to do this, I copied this code... but while sending, page error...

  • Tell me better what error it presents, if possible hosts a print with the images to see what is happening as well as the code you made.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.