upload multiple images

2

I know I already have some posts on this, but as I would just like to add to the code and not redo. In the code below, I need to add a way that the upload supports several images and as I still do not handle much I even went to the php site but could not implement, thank you right away for help

OBS: The implementation of a photo works perfectly

PHP

<?php
ini_set('display_errors', true);
    error_reporting(E_ALL);
include "conexao.php";

// Se o usuário clicou no botão cadastrar efetua as ações
if ($_POST['cadastrar']) {

// Recupera os dados dos campos
$foto = $_FILES["foto"];

// Se a foto estiver sido selecionada
if (!empty($foto["name"])) {

    // Largura máxima em pixels
    $largura = 2000;
    // Altura máxima em pixels
    $altura = 1080;
    // Tamanho máximo do arquivo em bytes
    $tamanho = 1000;

    // Verifica se o arquivo é uma imagem
    if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $foto["type"])){
       $error[1] = "Isso não é uma imagem.";
    } 

    // Pega as dimensões da imagem
    $dimensoes = getimagesize($foto["tmp_name"]);

    // Verifica se a largura da imagem é maior que a largura permitida
    if($dimensoes[0] > $largura) {
        $error[2] = "A largura da imagem não deve ultrapassar ".$largura." pixels";
    }

    // Verifica se a altura da imagem é maior que a altura permitida
    if($dimensoes[1] > $altura) {
        $error[3] = "Altura da imagem não deve ultrapassar ".$altura." pixels";
    }

    // Verifica se o tamanho da imagem é maior que o tamanho permitido
    if($arquivo["size"] > $tamanho) {
        $error[4] = "A imagem deve ter no máximo ".$tamanho." bytes";
    }

    // Se não houver nenhum erro
    if (count($error) == 0) {

        // Pega extensão da imagem
        preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $foto["name"], $ext);

        // Gera um nome único para a imagem
        $nome_imagem = md5(uniqid(time())) . "." . $ext[1];

        // Caminho de onde ficará a imagem
        $caminho_imagem = "fotos/" . $nome_imagem;

        // Faz o upload da imagem para seu respectivo caminho
        move_uploaded_file($foto["tmp_name"], $caminho_imagem);

        // Insere os dados no banco
        $sql = mysql_query("INSERT INTO tb_projetos (foto) VALUES ('".$nome_imagem."')") or die(mysql_error());

        // Se os dados forem inseridos com sucesso
        if ($sql){
            echo "Você foi cadastrado com sucesso.";
        }
    }

    // Se houver mensagens de erro, exibe-as
    if (count($error) != 0) {
        foreach ($error as $erro) {
            echo $erro . "<br />";
            }
        }
    }
}
?>

HTML

<div id="admin">
    <div class="container">
        <? include "includes/menu.php"?>
        <div class="lista-conteudo">
        <h1>Novo Usuário</h1>
        <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data" name="cadastro" >


        <p>
            <label for="foto">Fotos</label>
            <input type="file" name="foto" multiple="true" />
            <label class="bt-file">INSERIR</label>
        </p>
            <input type="submit" name="cadastrar" value="Cadastrar" />            
        </form>

        <h1>Usuários cadastrados</h1>
        <?php
        // Seleciona todos os usuários
        $sql = mysql_query("SELECT * FROM tb_projetos") or die(mysql_error());

        // Exibe as informações de cada usuário
        while ($usuario = mysql_fetch_object($sql)) {
            // Exibimos a foto
            echo "<figure><img src='fotos/".$usuario->foto."' alt='Foto de exibição' /></figure>";
            echo "<form action='deleta-fotos.php' method='post'>
                    <input type='hidden' name='id' value='". $usuario->id."'>
                    <input type='submit' name='deletar' value='deletar' />
                </form>";
        }


        ?>
        </div>
    </div>
</div>
    
asked by anonymous 29.08.2015 / 01:26

1 answer

1

Make a foreach loop with $FILES['foto'] because by activating in html the multiple option, it sends each file as an element of the $FILE['foto'] array.

<?php
ini_set('display_errors', true);
    error_reporting(E_ALL);
include "conexao.php";

// Se o usuário clicou no botão cadastrar efetua as ações
if ($_POST['cadastrar']) {

foreach($_FILES["foto"] as $up_index => $foto_uploaded){
// Recupera os dados dos campos
$foto = $foto_uploaded[$up_index];

// Se a foto estiver sido selecionada
if (!empty($foto["name"])) {

    // Largura máxima em pixels
    $largura = 2000;
    // Altura máxima em pixels
    $altura = 1080;
    // Tamanho máximo do arquivo em bytes
    $tamanho = 1000;

    // Verifica se o arquivo é uma imagem
    if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $foto["type"])){
       $error[1] = "Isso não é uma imagem.";
    } 

    // Pega as dimensões da imagem
    $dimensoes = getimagesize($foto["tmp_name"]);

    // Verifica se a largura da imagem é maior que a largura permitida
    if($dimensoes[0] > $largura) {
        $error[2] = "A largura da imagem não deve ultrapassar ".$largura." pixels";
    }

    // Verifica se a altura da imagem é maior que a altura permitida
    if($dimensoes[1] > $altura) {
        $error[3] = "Altura da imagem não deve ultrapassar ".$altura." pixels";
    }

    // Verifica se o tamanho da imagem é maior que o tamanho permitido
    if($arquivo["size"] > $tamanho) {
        $error[4] = "A imagem deve ter no máximo ".$tamanho." bytes";
    }

    // Se não houver nenhum erro
    if (count($error) == 0) {

        // Pega extensão da imagem
        preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $foto["name"], $ext);

        // Gera um nome único para a imagem
        $nome_imagem = md5(uniqid(time())) . "." . $ext[1];

        // Caminho de onde ficará a imagem
        $caminho_imagem = "fotos/" . $nome_imagem;

        // Faz o upload da imagem para seu respectivo caminho
        move_uploaded_file($foto["tmp_name"], $caminho_imagem);

        // Insere os dados no banco
        $sql = mysql_query("INSERT INTO tb_projetos (foto) VALUES ('".$nome_imagem."')") or die(mysql_error());

        // Se os dados forem inseridos com sucesso
        if ($sql){
            echo "Você foi cadastrado com sucesso.";
        }
    }

    // Se houver mensagens de erro, exibe-as
    if (count($error) != 0) {
        foreach ($error as $erro) {
            echo $erro . "<br />";
            }
        }
    }
}
}
?>

I put the treatment of images within foreach($_FILES["foto"] as $up_index => $foto_uploaded)

Now the (untested) code takes each photo you send and does the operations you coded previously.

    
29.08.2015 / 03:15