Multiple PHP uploads and insert several images into the mysql database

Asked

Viewed 2,068 times

1

It may be duplicated, but I couldn’t find any explanation that follows in my reasoning.

I have the following code taken from the Web, through a video lesson.

<form class="form-horizontal" method="POST" action="administrativo/processa/adm_proc_cad_produtos.php" enctype="multipart/form-data">

    <div class="form-group">
                <label for="inputEmail3" class="col-sm-2 control-label">Imagens</label>
                <div class="col-sm-10">
                    <input name="arquivo[]" type="file" multiple="multiple"/>
                </div>
    </div>

</form> 


<?php       

        if(isset($_FILES['arquivo'])){
        // informações da imagens
        $imagem = $_FILES['arquivo'];   
        $numArquivo = count(array_filter($imagem['name']));
        // Local de upload
        $pasta = "../../../imagens/produtos/";
        // Permissões de arquivos
        $tipo       = array('image/jpeg', 'image/png');
        $maxsize    = 1024 * 1024 * 10;
        // mensagens
        $msg        = array();
        $errorMsg   = array(
                                1 => 'Arquivos no upload é maior qye o limite definido de upload_max_filesize, por favor reduza suas imagens',
                                2 => 'O arquivo ultrapassa o limite de tamanho em MAX_FILE_SIZE',
                                3 => 'Upload feito parcialmente, e pode conter erros',
                                4 => 'Upload de arquivo não realizado'
                            );

        if($numArquivo <= 0)
                echo 'Selecione uma imagem';
            else{
                for($i = 0; $i < $numArquivo; $i++){
                    $name = $imagem['name'][$i];
                    $type = $imagem['type'][$i];
                    $size = $imagem['size'][$i];
                    $error = $imagem['error'][$i];
                    $tmp = $imagem['tmp_name'][$i];

                    $extensao = @end(explode('.', $name));
                    $nomeUnico = rand().".$extensao";

                    if($error != 0)
                        $msg[] = "<b>$name :</b> ".$errorMsg[$error];
                    else if(!in_array($type, $tipo))
                        $msg[] = "<b>$name :</b> Erro tipo imagem não permitida!";
                    else if($size > $maxsize)
                        $msg[] = "<b>$name :</b> Tamanho do(s) arquivo(s) maior que o limite 10MB!";
                    else {
                        if(move_uploaded_file($tmp, $pasta."/".$nomeUnico))
                            $msg[] = "<b>$name :</b> Upload realizado com sucesso!";
                        else
                            $msg[] = "<b>$name :</b> Erro! Ocorreu um erro, tente novamente!";
                        }
                }
                    $nomeimagem = implode(',', $nomeUnico);
                    $result_produtos = "INSERT INTO produtos (nome, situacao_produto_id, categorias_id, imagem, valor, texto, created) VALUES ('{$nome}', '{$situacao_produto_id}', '{$categorias_id}', '{$nomeimagem}', '{$valor}', '{$texto}', NOW())";
                    $resultado_produtos = mysqli_query($conn, $result_produtos);                        
 // fecha else
            }
        }
        ?>

To upload the file and write to the Mysql database.

The code uploads 1 multiple files, and Rand() the name, and sends the folder, the problem is to write to the database.

I would like it in my table (image) with the columns ID | image | date

in my (column image) when uploading several images they were inserted in the following form 1.jpg, 2.jpg, 3.jpg - in the column image the image name is uploaded in a single column.

I tried to accomplish the

$nomeimagem = implode(',', $nomeUnico);

Before inserting in the bank but implode parameter does not work.

Could someone please help me?

  • other information is being saved correctly?

1 answer

0


The point is that the function implode() needs a array() and you were passing a string, try like this:

$extensao = @end(explode('.', $name));
$nomes[]=$nomeUnico = rand().".$extensao";

After the loop for(), put it like this:

$nomeimagem = implode(',', $nomes);

Function reference implode()

  • 1

    perfect, solved... that’s what was losing me. It worked... Now the next problem, how to display the items in this separate column, pointing only their way, using method explode() ?

  • Great, I’m happy to help. Yes, to list you use the explode() to separate the names that were united by ","

  • 1

    Ok... thank you very much... helped a lot

  • Thank you very much

Browser other questions tagged

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