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);
},
})
})