Function for file upload

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 however I am not able to develop SQL to insert the file name into the database.

The ID and name is usually entered only if the file name is not entered, I even know it's in the part:

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

But I'm 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());
}
    
asked by anonymous 11.08.2015 / 20:24

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 into the variables $campos and $valores that you use to INSERT , since files are sent through the $_FILES variable. Then after foreach add the field and value referring to 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
    
11.08.2015 / 20:46