Carregar vários arquivos em PHP

Subodh Poudel 30 janeiro 2023
  1. 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
  2. Use o PDO para fazer upload de vários arquivos no banco de dados em PHP
Carregar vários arquivos em PHP

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 
Subodh Poudel avatar Subodh Poudel avatar

Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.

LinkedIn