Function for file upload

Asked

Viewed 54 times

4

I’m trying to create a function that takes 1 value from a input do tipo texto and 1 file.

I was able to move the file to the folder but I’m not able to develop SQL to insert the file name in the database.

The ID and name is normally entered only the file name is not entered, I even know it is in the part:

$inserir = $con->prepare("INSERT INTO $tabela($campos) VALUES($valores)");
$inseri = $inserir->execute(); // Execute a inserção

However I am not able to develop something to include this file path as well.

function cadastroComFoto($tabela, $dados){
    $con = conectar();

    $nomeArquivo = $_FILES["fotos"]["name"];
    $nomeTemporario = $_FILES["fotos"]["tmp_name"];
    $tamanhoArquivo = $_FILES["fotos"]["size"];
    $caminho = 'uploads/';

    $arquivoArray = explode(".", $nomeArquivo);
    $extensao = end($arquivoArray);
    $arquivo = $caminho.md5(time().rand(3212, 15452)).'.'.$extensao;

    if (!is_dir($caminho)) {
        mkdir($caminho);
        chmod($caminho, 777);
    }

    if (move_uploaded_file($nomeTemporario, $arquivo)) {
    foreach($_POST as $key => $val){
//Percorre os indices passados por POST armazanando em $key e os valores em $val
    $campo[] = $key; // Cria um array $campo com os indices
    $valor[] = "'$val'"; // Cria um array $valor com os valores


    $campos = implode(",", $campo); // Junta os indices de $campo com virgula
    $valores = implode(',', $valor); // Junta os valores de $valor com virgula

}

 // Prepara a inserção no banco de dados
  $inserir = $con->prepare("INSERT INTO $tabela($campos) VALUES($valores)");
  $inseri = $inserir->execute(); // Execute a inserção

  if ($inserir) { // Caso a inserção ocorra bem exibira uma mensagem de sucesso.
echo '<div class="alert alert-success" role="alert">Salvo com sucesso!</div>';
  }
  else { // Caso a inserção ocorra mal exibira uma mensagem de erro.
echo '<div class="alert alert-danger" role="alert">Erro ao inserir no banco de dados!</div>';
  }
  unset($campos); //Apaga os valores passados por POST --
  unset($valores);// -- para que o usuario não precise sair da pagina e voltar de novo para efetuar outra inserção.
}
print_r($inserir->errorInfo());
}
  • 1

    the problem is this foreach($_POST as $key => $val) { no output "$_POST" after loading an output $_FILES, grab the POST attributes before FILES,

  • @Kaduamaral because?

  • Add after the foreach the lines $campos[] = 'nome da coluna que vai receber o nome do arquivo'; and $valores[] = $arquivo;.

  • @Ivanferrer I managed to solve already! (after hours) the problem is not the one you mentioned.

  • @Rafaelacioly I hadn’t noticed that I was already putting the quotes on foreach, so I had commented on it, but I’ve already excluded.

1 answer

-1

After the code block:

foreach($_POST as $key => $val){
   //Percorre os indices passados por POST armazanando em $key e os valores em $val
   $campo[] = $key; // Cria um array $campo com os indices
   $valor[] = "'$val'"; // Cria um array $valor com os valores

   // Junta os indices de $campo com virgula
   $campos = implode(",", $campo); 

   // Junta os valores de $valor com virgula
   $valores = implode(',', $valor); 
}

The file is not being inserted in the variables $campos and $valores that you use to make the INSERT, since files are sent through the variable $_FILES. Then after the foreach add the field and value for the column and filename in the variables:

// Nome da coluna da tabela que vai receber o nome do arquivo no banco de dados
$campos[] = 'arquivo'; 
// Nome do arquivo ou caminho
$valores[] = "'".$arquivo."'";

// Continua o código

// Prepara a inserção no banco de dados
$inserir = $con->prepare("INSERT INTO $tabela($campos) VALUES($valores)");
$inseri = $inserir->execute(); // Execute a inserção

Browser other questions tagged

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