Upload de imagem com AJAX e PHP

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);
}
1 curtida

A imagem está chegando no PHP ?

Exemplos:

Um exemplo simples que você pode utilizar no seu código:

Página PHP

<!DOCTYPE html>
<html>
<head>
	<title>Upload de Fotos</title>
</head>
<body>
	<form name="form1" id="form1" enctype="multipart/form-data">
		<input type="text" name="nome">
		<input type="file" name="foto">
		<button type="button" id="btnSend" onclick="send()">Enviar</button>
	</form>
	<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.js"></script>
	<script>
		function send()
		{			
			var formData = new FormData(document.getElementById("form1"));			
			$.ajax({
	            type: 'POST',
	            url: 'submit.php',
	            data: formData,
	            contentType: false,
	            cache: false,
	            processData:false,
	            beforeSend: function(){
	            	    $('#btnSend').attr("disabled","disabled");
	                	$('#form1').css("opacity",".5");
	            },
	            success: function(msg){	 
	            console.log(msg);               
	                if(msg == 1)
	                {
	                    $('#form1')[0].reset();
	                    alert('Dados enviados com êxito');
	                }
	                else
	                {
	                    alert('Problemas no envios');
	                }
	                $('#form1').css("opacity","");
	                $("#btnSend").removeAttr("disabled");
	            }
	        });
		}
	</script>
</body>
</html>

Código PHP que recebe a foto:

<?php

	$nome = filter_input(INPUT_POST, 'nome');
	if (!$nome) $nome = uniqid();	
	$foto = $_FILES['foto'];	
	$dir = 'fotos/';

	if ($nome && $foto && isset($foto['name']))
	{
		$names = explode('.', $foto['name']);
		$ex = end($names);
		$nm = $dir.$nome.'.'.$ex;
		if (move_uploaded_file($foto['tmp_name'], $nm))
		{
			echo 1;
		}
		else echo 0;		
	}
	else echo 0;