Galera preciso de um auxilio para fazer upload de imagem com AJAX,PHP e MySQL Ele pega todos os dados certinho, até grava o caminho da imagem no MySQL, porém não cria o arquivo na pasta destino, o que eu quero é mover a imagem setada na pasta destino, se eu faço os mesmo processo de PHP porém sem AJAX, ele faz o upload normal e move ela para o diretório. Enfim o que eu quero é conseguir fazer upload de image, já vi alguns exemplos na net e tentei adaptar no meu porém não funcionou, por favor help!!
FORMULÁRIO
Perceba que eu coloquei ( enctype=“multipart/form-data” ) porém mesmo assim não manda via AJAX a foto para o diretorio
<form id="form_funcionario" class="needs-validation" enctype="multipart/form-data" novalidate>
<div class="form-group">
<div class="row">
<div class="col-sm" align="center">
<img src="img/fotoPadrao.png" id="image_pre" class="card__profile" />
<input type="file" id="upload" class="preview form-control" name="pic" accept="image/*" />
</div>
</div>
</div>
<div class="form-group">
<div class="row">
<div class="col-sm-6">
<label for="validationCustom01" class="col-form-label">Nome:</label>
<input type="text" id="validationCustom01" name="txtNome" class="form-control" required />
<div class="invalid-feedback">
Campo obrigatório*
</div>
</div>
<div class="col-sm-6">
<label for="validationCustom02" class="col-form-label">Sobrenome:</label>
<input type="text" id="validationCustom02" name="txtSobreNome" class="form-control" required />
<div class="invalid-feedback">
Campo obrigatório*
</div>
</div>
</div>
<div class="row">
<div class="col-sm-6">
<label for="validationCustom03" class="col-form-label">RG:</label>
<input type="text" id="validationCustom03" name="txtRg" class="form-control" required />
<div class="invalid-feedback">
Campo obrigatório*
</div>
</div>
<div class="col-sm-6">
<label for="validationCustom02" class="col-form-label">Tipo de Acesso:</label>
<div class="input-group mb-3">
<select class="form-control" name="selectTipo" required>
<?php include 'processosPHP/montarOptionsA.php'; ?>
</select>
<div class="input-group-append">
<button type="button" class="btn btn-success">
<i class="fas fa-plus"></i>
</button>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-6">
<label for="validationCustom04" class="col-form-label">Login:</label>
<input type="text" id="validationCustom04" name="txtLogin" class="form-control" required />
<div class="invalid-feedback">
Campo obrigatório*
</div>
</div>
<div class="col-sm-6">
<label for="validationCustom05" class="col-form-label">Senha:</label>
<input type="password" id="validationCustom05" name="txtSenha" class="form-control" required />
<div class="invalid-feedback">
Campo obrigatório*
</div>
</div>
</div>
<div class="row">
<div class="col-sm-6">
<label for="validationCustom06" class="col-form-label">Email:</label>
<input type="email" id="validationCustom06" name="txtEmail" class="form-control" required />
<div class="invalid-feedback">
Campo obrigatório*
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Cancelar</button>
<button type="submit" id="botaoCad" name="cadastrarFuncionario" class="btn btn-success">Cadastrar</button>
</div>
</form>
AJAX
$('#form_funcionario').submit(function(e){
e.preventDefault();
var formulario = $(this);
var retorno = inseriFormulario(formulario);
function inseriFormulario(dados){
$.ajax({
type:"POST",
data:dados.serialize(),
url: "processosPHP/cadastrarFuncionario.php",
async:false
}).then(sucesso,falha);
function sucesso(data){
$sucesso = $.parseJSON(data)["sucesso"];
$("#mensagem").show();
if($sucesso){
$("#mensagem p").html($.parseJSON(data)['mensagem']);
}else{
$("#mensagem p").html($.parseJSON(data)['mensagem']);
}
}
function falha(){
console.log("erro");
}
}
});
PHP
if(isset($_POST['txtNome'])) {
$nome = utf8_decode($_POST['txtNome']);
$sobreNome = utf8_decode($_POST['txtSobreNome']);
$rg = utf8_decode($_POST['txtRg']);
$email = utf8_decode($_POST['txtEmail']);
$login = utf8_decode($_POST['txtLogin']);
$senha = utf8_decode($_POST['txtSenha']);
$codTipoLogin = utf8_decode($_POST['selectTipo']);
$ext = strtolower(substr($_FILES['pic']['name'],-5)); //Pegando extensão do arquivo
$new_name = date("Y.m.d-H.i.s") . $ext; //Definindo um novo nome para o arquivo
$dir = './img/'; //Diretório para uploads
echo move_uploaded_file($_FILES['pic']['tmp_name'], $dir.$new_name);
$inserir = "INSERT INTO tbFuncionario ";
$inserir .= "(nome,sobreNome,rg,login,senha,foto,email,codTipoLogin) ";
$inserir .= "VALUES ";
$inserir .= "('$nome','$sobreNome','$rg', '$login','$senha','$new_name','$email','$codTipoLogin')";
$retorno = array();
$op_inser = mysqli_query($conecta,$inserir);
if($op_inser){
$retorno['sucesso'] = true;
$retorno['mensagem'] = "Transportadora inserida com sucesso";
}else{
$retorno['sucesso'] = false;
$retorno['mensagem'] = "Falha no sistema";
}
echo json_encode($retorno);
}