Problem passing some Json messages to Jquery

0

Well, I have a form that is passed to my PHP via Ajax in Jquery and returns the result via Json to my console. Here's a snippet of code in PHP.

if($tabela == 'setup') {

    if(isset($_POST['nome'])){
        $nome = $_POST['nome'];
        if(strlen($nome) < 6) {
            $res['resultado'] = "inv";
            $res['campo'] = "nome";
            $res['mensagem'] = "Nome muito curto";
        } else {
            $sql = "UPDATE professores SET nome='$nome' WHERE idprofessor = $meuid";
        }
    } else if(isset($_POST['email']) and isset($_POST['telefone'])){
        $email = $_POST['email'];
        $telefone = $_POST['telefone'];
        if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $sql = "UPDATE professores SET email='$email',telefone='$telefone' WHERE idprofessor = $meuid";
        } else {
            $res['mensagem'] = "E-mail inválido.";
        }

    } else if(isset($_POST['senha_nova'])){
        $res['ok'] = "senha";
        $senha_atual = md5($_POST['senha_atual']);
        $busca_atual = $pdw -> prepare("SELECT senha FROM professores WHERE idprofessor = $meuid AND senha = '$senha_atual'");
        try {
            $busca_atual -> execute();
            $res['resultado'] = "ok";
            $res['mensagem'] = "Dados retornados";
        } catch(PDOException $e) {
            $res['resultado'] = "erro";
            $res['mensagem'] = $e->getMessage();
        }
        if($busca_atual->rowCount < 1) {
            $res['resultado'] = "ok";
        } else {
            $senha_nova = $_POST['senha_nova'];
            $senha_confirma = $_POST['senha_confirma'];
            // comparar senhas
            //$sql = "UPDATE professores SET senha=".md5($senha_nova)." WHERE idprofessor = $meuid";
            $res['sql'] = $sql;
        }
    };
    if($sql) {
        $atualiza = $pdw -> prepare($sql);
        try {
            $atualiza -> execute();
            $res['resultado'] = "ok";
            $res['mensagem'] = "Dados atualizados com sucesso";
        } catch(PDOException $e) {
            $res['resultado'] = "erro";
            $res['mensagem'] = $e->getMessage();
        }
    }
}
echo json_encode($res);

Then you have the code to run the update via PDO and the echo json_encode ($ res);

If the user types more than 6 characters in the text box, it runs correctly and prints to the console log correctly. However typing less does not return the error message as expected.

I made the test by placing the form directly on this ajax.php page and it displays the messages correctly, but for Jquery it will not.

Follow the Jquery code

    $('form').on('submit', function(e){
    e.preventDefault();
    var formulario = $(this).attr('name');
    var acao = $(this).attr('action');
    var dados = $(this).serialize();
    $('input.validate').removeClass('invalid');
    $.ajax({
        url: 'ajax/geral.php?act='+acao+'&tbl='+formulario,
        dataType: 'json',
        data: dados,
        type: 'post',
        success: function(data){
            if(data.resultado == 'ok') {
                M.toast({html: data.mensagem});
            } else if(data.resultado == 'erro') {
                M.toast({html: "Ocorreu um erro ao atualizar dados."});
                console.log(data.mensagem);
            } else if(data.resultado == 'inv') {
                M.toast({html: data.mensagem});
                $('input.validate#'+data.campo).addClass('invalid');
            }
            console.log(data);
        },
    })

})

    
asked by anonymous 07.05.2018 / 21:58

1 answer

-1

Within if() that checks if the name is short, there is also a

echo json_encode($res)
    
07.05.2018 / 22:03