Insert multiple type file records into Mysql

2

I'm making a form, where you have a part of registering images for a photo gallery.

In this field I use a script with a add field button so that a new field can be inserted for each photo

<label>Galeria de Foto</label>
<BR><BR>
<button type="button" id="add_field" class="btn btn-success"><i class="fa fa-check"></i> Adicionar + Foto</button>
<br>
<div id="listas">
    <div><input name="fotos[]" type="file" class="form-control" aria-describedby="fileHelp" style="width: 70%;"></div>
</div>

This is the script that adds the new field:

<script>
    $(document).ready(function() {
    var campos_max          = 10;   //max de 10 campos
    var x = 1; // campos iniciais
    $('#add_field').click (function(e) {
            e.preventDefault();     //prevenir novos clicks
            if (x < campos_max) {
                    $('#listas').append('<div>\
                    <input name="fotos[]" type="file" class="form-control" aria-describedby="fileHelp" style="width: 70%;">\
                            <a href="#" class="remover_campo">Remover</a>\
                            </div>');
                    x++;
            }
    });

    // Remover o div anterior
    $('#listas').on("click",".remover_campo",function(e) {
            e.preventDefault();
            $(this).parent('div').remove();
            x--;
    });
});
</script>

So far so good. It creates a new file field, named photos [] . And upload it to the folder I set, without any error.

The problem is when you save the name of each image in the database.

After sending the form by post it performs the following:

<?
//include_once("config.php");
$nome_embarcacao = $_POST[nome];
$tipo = $_POST[tipo];
$arquivo = $_POST[arquivo];
$capacidade = $_POST[capacidade];
$tamanho = $_POST[tamanho];
$motorizacao = $_POST[motorizacao];
$equipamentos = $_POST[equipamentos];
$periodo_passeio = $_POST[periodo_passeio];
$area_navegacao = $_POST[area_navegacao];
$descricao = $_POST[descricao];


$sql = "INSERT INTO 'embarcacao' ('id', 'nome', 'tipo', 'arquivo', 'capacidade', 'tamanho', 'motorizacao', 'equipamentos', 'periodo_passeio', 'area_navegacao', 'descricao') VALUES (NULL, '$nome_embarcacao', '$tipo', '$arquivo', '$capacidade', '$tamanho', '$motorizacao', '$equipamentos', '$periodo_passeio', '$area_navegacao', '$descricao');";
$sql = mysql_query($sql);

$id_recuperado = mysql_insert_id();

// inicia criação de pasta
$pasta = @mkdir("../assets/images/embarcacoes/$id_recuperado");

// fim da criação da pasta
$uploaddir="../assets/images/embarcacoes/$id_recuperado/";

if($arquivo != "none") {// verifica campo foto 1
if (copy($_FILES['arquivo']['tmp_name'], $uploaddir . $_FILES['arquivo']['name'])) {
$varfoto01 = $_FILES['arquivo']['name'];
$var1 = mysql_query("update embarcacao set arquivo='$varfoto01' where 
id='$id_recuperado'");
}}


// Pasta de destino das fotos 
$Destino = "../assets/images/embarcacoes/$id_recuperado/"; 
// Obtém dados do upload 
$Fotos = $_FILES["fotos"]; 
// Contagem de fotos enviadas 
$Conta = 0; 

// Itera sobre as enviadas e processa as validações e upload 
for($i = 0; $i < sizeof($Fotos); $i++) 
{ 
 // Passa valores da iteração atual 
 $Nome = $Fotos["name"][$i]; 
 $Tamanho = $Fotos["size"][$i]; 
 $Tipo = $Fotos["type"][$i]; 
 $Tmpname = $Fotos["tmp_name"][$i]; 

 // Verifica se tem arquivo enviado 
if($Tamanho > 0 && strlen($Nome) > 1) 
{ 
 // Verifica se é uma imagem 
 if(preg_match("/^image\/(gif|jpeg|jpg|png)$/", $Tipo)) 
 { 
 // Caminho completo de destino da foto 
 $Caminho = $Destino . $Nome; 

 // Tudo OK! Move o upload! 
 if(move_uploaded_file($Tmpname, $Caminho)) 
 { 

 $sql_fotos = "INSERT INTO 'embarcacao_fotos' ('id', 'id_embarcacao', 'arquivo') VALUES";

foreach($_POST['fotos'] AS $indice => $valor) {

  $sql_fotos .= " (NULL, '{$id_recuperado}', '{$valor}'),";
}

echo "Foto #" . ($i+1) . " enviada.<br/>"; 

// Faz contagem de enviada com sucesso 
$Conta++; 
} 
else // Erro no envio 
{ 
 // $i+1 porque $i começa em zero 
 echo "Não foi possível enviar a foto #" . ($i+1) . "<br/>"; 
} 
} 
} 
} 

if($Conta) // Imagens foram enviadas, ok! 
{ 
echo "<br/>Foi(am) enviada(s) " . $Conta . " foto(s).";
} 

else // Nenhuma imagem enviada, faz alguma ação 
{ 
echo "Você não enviou fotos!"; 
}
?>

In foreach ($ _ POST ['photos'] , it does not enter the name of each file in the database.

I wonder if anyone can help me. With this function save the file names of the fotos[] field in the database. I just need this. Save your names, as the upload in the created folder it is already doing normal.

Sorry if my post is duplicate and sorry if I could not explain it right. I am new to creating article for help. I can always find someone with the same problem and solve for his question. But this one I have already tried and I do not find anyone with the same problem.

Hugs to all

    
asked by anonymous 22.05.2018 / 20:47

1 answer

1
  • Use foreach to generate the string

    foreach($_POST['fotos'] AS $indice => $valor) {
      $values .= " (NULL, '{$id_recuperado}', '{$valor}'),";
    }
    
  • Remove the last comma from the string

    $values=substr($values, 0, -1);
    
  • Use the string as value of the INSERT statement

     $sql_fotos = "INSERT INTO 'embarcacao_fotos' ('id', 'id_embarcacao', 'arquivo') VALUES $values";
    
  •   

    By analyzing your code after having it indented in a more readable way, I checked that the logic is wrong. The foreach is within a for loop and thus the $values variable is being created in the wrong way. So I've refactored the code so that the upload and insert in the embarcacao_fotos table are executed correctly and with the mysqli _ *

    <?php
    
    //coloquei esse if mas você faça do modo que deva ser do seu interesse, eé da ultima chave de fechamento
    if (isset($_POST['tipo'])) {
    
    /**não devemos usar "mysql" pelo seu desenvolvimento ter sido descontinuado; a extensão se tornou obsoleta e essas funções não irão funcionar em futuras versões do PHP*/
    //include_once("config.php");
    
    //use mysqli ou PDO
    $conn = new mysqli ("localhost", "Usuario", "Senha", "nome_DB");
    
    $nome_embarcacao = $_POST['nome'];
    $tipo = $_POST['tipo'];
    $arquivo = $_POST['arquivo'];
    $capacidade = $_POST['capacidade'];
    $tamanho = $_POST['tamanho'];
    $motorizacao = $_POST['motorizacao'];
    $equipamentos = $_POST['equipamentos'];
    $periodo_passeio = $_POST['periodo_passeio'];
    $area_navegacao = $_POST['area_navegacao'];
    $descricao = $_POST['descricao'];
    
    //com mysqli
    $sql = "INSERT INTO 'embarcacao' ('id', 'nome', 'tipo', 'arquivo', 'capacidade', 'tamanho', 'motorizacao', 'equipamentos', 'periodo_passeio', 'area_navegacao', 'descricao') VALUES (NULL, '$nome_embarcacao', '$tipo', '$arquivo', '$capacidade', '$tamanho', '$motorizacao', '$equipamentos', '$periodo_passeio', '$area_navegacao', '$descricao');";
    $executa = mysqli_query($conn,$sql);
    
    $id_recuperado = $conn->insert_id;
    
    // inicia criação de pasta
    
    mkdir("../assets/images/embarcacoes/$id_recuperado/", 0777, true);
    
    // fim da criação da pasta
    $uploaddir="../assets/images/embarcacoes/$id_recuperado/";
    
    if($arquivo != "none") {// verifica campo foto 1
    if (copy($_FILES['arquivo']['tmp_name'], $uploaddir . $_FILES['arquivo']['name'])) {
    $varfoto01 = $_FILES['arquivo']['name'];
    
    //com mysqli
    $conn->query("UPDATE embarcacao set arquivo='$varfoto01' where 
    id='$id_recuperado'"); 
    }}
    
    /************************************************************************************/
    /********  daqui pra baixo faz upload e insert na tabela embarcacao_fotos ***********/
    /************************************************************************************/
    
    $j = 0;
    
    // Pasta de destino das fotos
    $caminhoDestino = "../assets/images/embarcacoes/$id_recuperado/";
    
    $Fotos=$_FILES['fotos'];
    
        for ($i = 0; $i < count($Fotos['name']); $i++) {
            //nome e extensão do arquivo
            $nome = ($Fotos['name'][$i]);
    
            if($nome!=""){
                //constroi os values da declaração INSERT para a tabela embarcacao_fotos
                $values .= " (NULL, '{$id_recuperado}', '{$nome}'),";
    
                 $extensoesValidas = array("jpeg", "jpg", "png", "gif");
                 //basename() retorna apenas a parte que corresponde ao nome do arquivo.
                 $ext = explode('.', basename($Fotos['name'][$i]));
    
                 //end() avança o ponteiro interno de array até o seu último elemento, e retorna-o.
                 $extensaoArquivo = end($ext);
    
                 // Caminho completo de destino da foto
                 $caminhoCompleto = $caminhoDestino.$nome;
    
                 $j = $j + 1;
                    if (($Fotos["size"][$i]>0) && in_array($extensaoArquivo, $extensoesValidas)) {
                        if (move_uploaded_file($Fotos['tmp_name'][$i], $caminhoCompleto)) {
                         echo $j. ').<span id="noerror">Imagem carregada com êxito!.</span><br/><img src="'.$caminhoCompleto.'" width="50px" height="50px" /><br/><br/>';
                        } else {
                         echo $j. ').<span id="error">Por favor, tente novamente!.</span><br/><br/>';
                        }
                    } else {
                    echo $j. ').<span id="error">***Tamanho ou tipo de arquivo inválido***</span><br/><br/>';
                    }
            }
        }
    
        //retira a ultima virgula
        $values=substr($values, 0, -1);
    
        //declaração insert 
        $sql_fotos = "INSERT INTO 'embarcacao_fotos' ('id', 'id_embarcacao', 'arquivo') VALUES $values";
        //executa a query
        $executa = mysqli_query($conn,$sql_fotos);
    
        mysqli_close($conn); 
    
    
    }
    ?>
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script><script>$(document).ready(function(){varcampos_max=10;//maxde10camposvarx=1;//camposiniciais$('#add_field').click(function(e){e.preventDefault();//prevenirnovosclicksif(x<campos_max){$('#listas').append('<div>\<inputname="fotos[]" type="file" class="form-control" aria-describedby="fileHelp" style="width: 70%;">\
                                <a href="#" class="remover_campo">Remover</a>\
                                </div>');
                        x++;
                }
        });
    
        // Remover o div anterior
        $('#listas').on("click",".remover_campo",function(e) {
                e.preventDefault();
                $(this).parent('div').remove();
                x--;
        });
    });
    </script>
    
    
    <form class="form-horizontal m-t-40" autocomplete="off" action="?pg=enviar_embarcacao" method="post" enctype="multipart/form-data" novalidate>
      <div class="form-group">
    <label>Tipo Embarcação</label>
    <select name="tipo" class="custom-select col-12" id="inlineFormCustomSelect">
      <option selected>Selecione o tipo...</option>
      <option value="1">Alugar</option>
      <option value="2">Vender</option>
    </select>
      </div>
      <div class="form-group">
    <label>Nome</label>
    <div class="controls">
      <input type="text" name="nome" class="form-control" required data-validation-required-message="Nome obrigatorio!">
    </div>
      </div>
      <div class="form-group">
    <label>Imagem destaque</label>
    <div class="controls">
      <input name="arquivo" type="file" class="form-control" id="exampleInputFile" aria-describedby="fileHelp" required data-validation-required-message="Essa imagem é obrigatória!">
    </div>
      </div>
      <div class="row">
    <div class="col-lg-4">
      <div class="form-group">
        <label>Capacidade</label>
        <input name="capacidade" type="text" class="form-control" placeholder=".col-5">
      </div>
    </div>
    <div class="col-lg-4">
      <div class="form-group">
        <label>Tamanho</label>
        <input name="tamanho" type="text" class="form-control" placeholder=".col-5">
      </div>
    </div>
    <div class="col-lg-4">
      <div class="form-group">
        <label>Periodo Passeio</label>
        <input name="periodo_passeio" type="text" class="form-control" placeholder=".col-5">
      </div>
    </div>
      </div>
      <div class="row">
    <div class="col-lg-6">
      <div class="form-group">
        <label>Area de Navegação</label>
        <input name="area_navegacao" type="text" class="form-control" placeholder=".col-5">
      </div>
    </div>
    <div class="col-lg-6">
      <div class="form-group">
        <label>Motorização</label>
        <input name="motorizacao" type="text" class="form-control" placeholder=".col-5">
      </div>
    </div>
      </div>
      <div class="form-group">
    <label>Equipamentos</label>
    <div class="controls">
      <textarea name="equipamentos" id="texto-principal" class="textarea_editor form-control" rows="15" placeholder="Digitar o texto ..." required data-validation-required-message="Esse texto é obrigatório!"></textarea>
    </div>
      </div>
      <div class="form-group">
    <label>Descrição</label>
    <textarea name="descricao" id="texto-extra2" class="textarea_editor form-control" rows="15" placeholder="Digitar o texto ..."></textarea>
      </div>
      <p>
    <label>Galeria de Foto</label>
    <BR>
    <BR>
    <button type="button" id="add_field" class="btn btn-success"><i class="fa fa-check"></i> Adicionar + Foto</button>
    <br>
      <div id="listas">
    <div>
      <input name="fotos[]" type="file" class="form-control" aria-describedby="fileHelp" style="width: 70%;">
    </div>
      </div>
      </p>
      <button type="submit" class="btn btn-info">Cadastrar</button>
      <button type="reset" class="btn btn-inverse">Apagar Tudo</button>
    </form>
    
        
    22.05.2018 / 21:57