Image Upload with Ajax (fakepatch) to PHP

Asked

Viewed 86 times

0

I’m taking data from a form (HTML) to register in my database, the data is coming as follows in the Firefox Console. http://prntscr.com/ig4kcm. In my view the problem seems to be in the $_FILE variable that cannot catch the file with this fakepatch, what would be the correct way to do it ? I’m not very experienced in web development My file . js is as follows:

$("#cadastrar").click(function(e){
e.preventDefault();
e.stopImmediatePropagation();

var inputs=$("#form .control-group :input");

var valuesFields={};
inputs.each(function (){
    valuesFields[this.name]=$(this).val();
});
var dataFields="titulo="+valuesFields["titulo"];
$.each(valuesFields,function(field,key){
    if(field!="titulo" && key!=""){
        dataFields+="&"+field+"="+key;
    }
});

console.log(dataFields);
//return;

$.ajax({
    url: "../php/cadastro.empresa.php",
    type: "POST",
    data: dataFields,
    dataType: "json"

}).done(function(resposta) {
    if(resposta.success){
        window.alert("Empresa inserida com sucesso!");
        var inputs=$("#form .control-group :input");
        inputs.each(function (){
            $(this).val("");
        });
        location.reload();
    }else if(resposta.falha){
        window.alert("Empresa jรก cadastrada!");
    }
    else{
        window.alert("Erro, tente novamente!");
    }

}).fail(function(jqXHR, textStatus ) {
    window.alert("Erro interno, tente novamente!");
    console.log(textStatus);

}).always(function() {

});

});

and my php file is as follows:

header('Content-type: application/json; charset=utf-8'); 
include "bddata.php";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$titulo=$_POST["titulo"];

$sql2 = "SELECT titulo FROM empresa WHERE titulo = '$titulo'";
$stmt2=$conn->query($sql2);
$destaque = "N";
if($stmt2->num_rows > 0){
    $result = ['falha' => true];
}else{


// Recupera os dados dos campos
$foto = $_FILES["arquivo"];

// Se a foto estiver sido selecionada
if (!empty($foto["name"])) {

    // Largura máxima em pixels
    $largura = 3000;
    // Altura máxima em pixels
    $altura = 3000;
    // Tamanho máximo do arquivo em bytes
    $tamanho = 5000;

    $error = array();

    // Verifica se o arquivo é uma imagem
    if(!preg_match("/^image\/(pjpeg|jpeg|png|gif|bmp)$/", $foto["type"])){
       //$error[1] = "Isso não é uma imagem.";
       die("Isso não é uma imagem");
    } 

    // Pega as dimensões da imagem
    $dimensoes = getimagesize($foto["tmp_name"]);

    // Verifica se a largura da imagem é maior que a largura permitida
    if($dimensoes[0] > $largura) {
        //$error[2] = "A largura da imagem não deve ultrapassar ".$largura." pixels";
        die("A largura da imagem não deve ultrapassar");
    }

    // Verifica se a altura da imagem é maior que a altura permitida
    if($dimensoes[1] > $altura) {
        //$error[3] = "Altura da imagem não deve ultrapassar ".$altura." pixels";
        die("Altura da imagem não deve ultrapassar ");
    }

    // Verifica se o tamanho da imagem é maior que o tamanho permitido
    if($foto["size"] > $tamanho) {
        //$error[4] = "A imagem deve ter no máximo ".$tamanho." bytes";
        die("A imagem deve ter no máximo ");
    }

    // Se não houver nenhum erro
    if (count($error) == 0) {

        // Pega extensão da imagem
        preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $foto["name"], $ext);

        // Gera um nome único para a imagem
        $nome_imagem = md5(uniqid(time())) . "." . $ext[1];

        // Caminho de onde ficará a imagem
        $caminho_imagem = "imagens_upload/" . $nome_imagem;

        // Faz o upload da imagem para seu respectivo caminho
        move_uploaded_file($foto["tmp_name"], $caminho_imagem);

        // Insere os dados no banco
        $sql= "INSERT INTO empresa(titulo, endereco, numero, complemento, frase, nome_proprietario, telCel, telFix, descricao, caracteristica, mapa_id_mapa, destaque, link_facebook, link_twitter, link_googlemore, imagem) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
        $stmt=$conn->prepare($sql);

        $stmt->bind_param("ssssssssssisssss",$_POST["titulo"],$_POST["endereco"],$_POST["numero"],$_POST["complemento"],
                    $_POST["frase"],$_POST["proprietario"], $_POST["telefone"],$_POST["telefonefixo"],
                    $_POST["descricao"],$_POST["caracteristica"],intval($_POST["mapa"]),$destaque,$_POST["facebook"],$_POST["twitter"],$_POST["google"],$caminho_imagem);

        $success = $stmt->execute();
        $stmt->close();

        $result = ['success' => $success];      

        // Se os dados forem inseridos com sucesso
    }

}




}

print json_encode($result);
$conn->close();
  • 1

    The following reply: https://answall.com/a/269912/99718

  • I’ll look now, thanks friend.

  • I made changes here and I am getting a parsererror on the console, probably this now should come from php. See if the change I made is correct, post the code js again.

  • By the island still continues to return the fakepatch

  • is because you nay is sending the variable form with AJAX, instead you keep sending the variable dataFields that does not store the image for sending.

  • Well observed, I already have the neurons burned kkkk, I will assemble the dataFields manually here putting her in this pattern.

Show 1 more comment
No answers

Browser other questions tagged

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