HOWTO · PHP

Carregar vários arquivos em PHP

Este tutorial apresenta como fazer upload de vários arquivos em PHP

Nesta página

Apresentaremos um método para fazer upload de vários arquivos em PHP especificando o atributo name da tag input como um array e usando o atributo multiple. O valor do atributo enctype da tag form é multipart/form-data. Este método usa mysqli para a conexão do banco de dados.

Também apresentaremos outro método para fazer upload de vários arquivos em PHP usando o PDO. Faremos upload dos arquivos em uma pasta e, em seguida, faremos upload para um banco de dados. Este método é semelhante ao primeiro método em termos de implementação.

Use a tag multiple, um array na tag name do atributo input no formulário e a função move_uploaded_file() para enviar vários arquivos em PHP

Podemos especificar o atributo name da tag input como um array para fazer upload de vários arquivos. A tag input usa a palavra-chave multiple que nos permite selecionar o arquivo múltiplo durante o upload. Podemos escrever a codificação multipart/form-data para o atributo enctype para especificar como os dados do formulário devem ser codificados durante o envio do formulário. Podemos usar o mysqli para conectar ao banco de dados. A função move_uploaded_file() move o arquivo enviado de um local temporário do servidor para o local desejado. Podemos usar as instruções INSERT SQL para fazer o upload do arquivo selecionado para o banco de dados.

Por exemplo, defina uma conexão de banco de dados com o objeto mysqli e atribua o valor à variável $db. Crie um formulário HTML com o método POST e o tipo de codificação como multipart/form-data para fazer o upload dos arquivos. Especifique o atributo type da tag input como file e o atributo name como file. Não se esqueça de escrever o atributo multiple antes de fechar a tag input. Escreva a tag input para enviar o formulário.

Verifique se o formulário foi enviado com a função isset(). Use a função count para contar o número de arquivos carregados. Pegue o $_FILES['file']['name'] como o parâmetro para a função count e atribua-o a uma variável $countfiles. Use o loop for para fazer um loop sobre o arquivo carregado. Dentro do loop, crie uma variável $filename e atribua-a como $_FILES['file']['name'][$i]. Crie uma pasta chamada upload no diretório raiz. Use a função move_upload_file() para mover o arquivo. Use $_FILES['file']['tmp_name'][$i] como o primeiro parâmetro que é o arquivo com nome temporário. Use 'upload/'.$filename como o segundo parâmetro que é o nome do arquivo e o local para armazenar o arquivo enviado.

Execute uma consulta SQL INSERT para inserir os arquivos no banco de dados. Insira a variável $filename como id e name na tabela fileup do banco de dados. Use a variável $db para chamar a função query() com a variável $sql como o parâmetro para executar a consulta.

Código de exemplo:

# php 7.*
<?php
if(isset($_POST['submit'])){
    $countfiles = count($_FILES['file']['name']);
    for($i=0;$i<$countfiles;$i++){
        $filename = $_FILES['file']['name'][$i];
        $sql = "INSERT INTO fileup(id,name) VALUES ('$filename','$filename')";
        $db->query($sql);
        move_uploaded_file($_FILES['file']['tmp_name'][$i],'upload/'.$filename);
    }
}
?>
<form method='post' action='' enctype='multipart/form-data'>
<input type="file" name="file[]" id="file" multiple>
<input type='submit' name='submit' value='Upload'>
</form>
?>

Resultado:

SELECT * FROM `fileup`
id name 
1 cfc.jpg 
2 hills.jpg

Use o PDO para fazer upload de vários arquivos no banco de dados em PHP

Podemos usar o PDO para fazer upload de vários arquivos em PHP. Podemos usar o objeto PDO para criar uma conexão com o banco de dados. Usamos as instruções preparadas para inserir o arquivo no banco de dados. Este método é diferente do primeiro método apenas em termos de conexão com o banco de dados. Também podemos usar o formulário HTML exato para este método. Demonstramos esse método fazendo upload de dois arquivos jpg na pasta e no banco de dados.

Por exemplo, estabeleça uma conexão de banco de dados PDO usando a palavra-chave new e atribua-a à variável $conn. Verifique se o formulário foi enviado com a função isset(). Conte os arquivos usando a função count como acima. Em seguida, escreva uma consulta na variável $query para inserir o id e o name. Escreva os marcadores de posição ? para os valores na consulta. Prepare a consulta usando a função prepare() e atribua o valor na variável $statement. Mova cada arquivo para a pasta uplaod usando a função move_uploaded_file(). Execute a consulta usando a função execute(). Forneça um array com $filename e $target_file como os parâmetros da função.

No exemplo abaixo, o usuário carrega dois arquivos jpg. Em primeiro lugar, o arquivo é enviado para a pasta upload e, em seguida, é enviado para o banco de dados. O banco de dados contém a tabela fileup e as colunas id e name. Para aprender mais sobre a função move_uploaded_files(), consulte o Manual do PHP

Código de exemplo:

#php 7.x
<?php
$conn = new PDO("mysql:host=$server;dbname=$dbname","$username","$password");
$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
if(isset($_POST['submit'])){
    $countfiles = count($_FILES['file']['name']);
    $query = "INSERT INTO fileup (id, name) VALUES(?,?)";
    $statement = $conn->prepare($query);
    for($i=0;$i<$countfiles;$i++){
        $filename = $_FILES['file']['name'][$i];
        $target_file = 'upload/'.$filename;
        move_uploaded_file($_FILES['file']['tmp_name'][$i],$target_file);
        $statement->execute(array($filename,$target_file));
        }
  }    
?>

Resultado:

SELECT * FROM `fileup`
id name 
1 upload/cfc.jpg 
2+ upload/count.jpg