upload multiple images

Asked

Viewed 812 times

2

I know you already have some posts on this subject, 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 don’t know much I even went to the php site but I couldn’t implement, I thank you from the start the help

NOTE: 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>
  • I don’t understand, your problem is in html(input file) or php?

  • rray So I don’t know how to do in php the html I put just for illustration

  • Hello, if the form is for a user’s registration, why allow multiple images ? Another thing is, where did the variable come from $ext, and also, to read the individual names you would need to read the value of that field as a array, not as a normal file.

1 answer

1

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

<?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 the images inside foreach($_FILES["foto"] as $up_index => $foto_uploaded)

Now the (untested) code takes each sent photo and does the operations you previously encoded.

  • Everton da Rosa Thanks for the tip but all I found on the net was to upload without showing the image and the ones that showed the image were like mine that only showed one only has no way you help me with the example I posted?

  • Man, I’m out of code editor at the moment, but I added the foreach on the same Otepad. Take a look if this is what you need (I edited the answer)

Browser other questions tagged

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