Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal, tudo bem ? Eu estou começando a aprender a mecher com ajax, validacao client-side consegui fazer numa boa, mas estou com duvidas na hora de validar no php, entendo que o fluxo é o seguinte:
FORM PARA O SUBMIT -> PELO AJAX FAZ REQUISICAO AO ARQUIVO PHP -> O ARQUIVO PHP FAZ A OPERACAO NO BANCO E DEVOLVE ESSA INFORMACAO PRO AJAX
Soh que eu estou com duvidas na hora de validar no php, se fosse do jeito comum faria com um echo, mas como eh assincrono eu tenho que devolver esse resultado por ajax e ali no form vou mostarr a msg com um plugin de notificacao.
Vou pegar as partes que interessam:
meu arquivo function.js
//----------------------------Envio do form-------------------------------------
$("#frm_cadastro").submit(function(event) {
// event.preventDefault();
var dados = $(this).serialize();
// alert(dados);
var msg = "";
$(".required").each(function() {
if($(this).val() == "") {
msg += "<p>O campo "+$(this).attr("data-label")+" deve ser preenchido !</p><br />";
$(this).css("border-color", "red");
} else {
$(this).css("border-color", "#8a8a8a");
}
});
if(msg == "") {
$.ajax({
type : "POST",
dataType: "json",
url : "controllers/cadastro.php",
async: true,
data: dados,
success: function(response) {
$.each($("input[type=text], input[type=file], input[type=password], textarea"), function() {
// $("#frm_cadastro").children().each(function() {
// if($(this).attr("type") == "text" || $(this).attr("type") == "file" || $(this).attr("type") == "password" || $(this).is("textarea")) {
$(this).val("");
// }
});
var n = noty({text: 'Seu cadastro foi efetuado com sucesso !', type: 'success', timeout: 2000});
},
error: function(response) {
if(msgerro == "") {
var msgerro = "Houve um erro ao efetuar o cadastro, por favor tente mais tarde !";
}
var n = noty({text: msgerro, type: 'error'});
}
});
return false;
} else {
var n = noty({text: msg, type: 'error'});
return false;
}
});<?php
require_once "../includes/Config.php";
//Verifica se o plano: gratuito ou pago
if($_POST["plano"] == "gratis") {
//Pega os dados do formulario
$plano = $_POST["plano"];
$categoria = $_POST["categoria"];
$nome = $_POST["nome"];
$cep = $_POST["cep"];
$estado = $_POST["estado"];
$cidade = $_POST["cidade"];
$endereco = $_POST["endereco"].", ".$_POST["numero"]." - ".$_POST["bairro"];
$complemento = $_POST["complemento"];
$telefone = $_POST["telefone"];
$descricao = $_POST["descricao"];
$email = "";
$site = "";
$seo = "";
$video = "";
$logo = "";
$login = "";
$senha = "";
$flag = $_POST["flag"];
$sql = "INSERT INTO tbmaterias(plano, id_titulo, nome, cep, estado, cidade, endereco, complemento, telefone, descricao, email, site, seo, video, imagem, login, senha, flag_status) VALUES('$plano', '$categoria', '$nome', '$cep', '$estado', '$cidade', '$endereco', '$complemento', '$telefone', '$descricao', '$email', '$site', '$seo', '$video', '$logo', '$login', '$senha', '$flag')";
mysql_query($sql) or die(mysql_error());
$response = array("success" => true);
echo json_encode($response);
} else {
//Caso contrario, ira realizar o cadastro pago
$plano = $_POST["plano"];
$categoria = $_POST["categoria"];
$nome = $_POST["nome"];
$cep = $_POST["cep"];
$estado = $_POST["estado"];
$cidade = $_POST["cidade"];
$endereco = $_POST["endereco"].", ".$_POST["numero"]." - ".$_POST["bairro"];
$complemento = $_POST["complemento"];
$telefone = $_POST["telefone"];
$descricao = $_POST["descricao"];
$email = $_POST["email"];
$site = $_POST["site"];
$seo = $_POST["seo"];
$video = $_POST["video"];
$logo = "";
$login = $_POST["login"];
$senha = $_POST["senha"];
$flag = "";
//Verifica se o usuario digitado ja existe
if(mysql_num_rows(mysql_query("SELECT * FROM tbmaterias WHERE login = '$login'")) == 0) {
$sql = "INSERT INTO tbmaterias(plano, id_titulo, nome, cep, estado, cidade, endereco, complemento, telefone, descricao, email, site, seo, video, imagem, login, senha, flag_status) VALUES('$plano', '$categoria', '$nome', '$cep', '$estado', '$cidade', '$endereco', '$complemento', '$telefone', '$descricao', '$email', '$site', '$seo', '$video', '$logo', '$login', '$senha', '$flag')";
mysql_query($sql) or die(mysql_error());
$response = array("success" => true);
echo json_encode($response);
} else {
$response = array("error" => true, "msgerro" => "O usuário digitado já existe !");
echo json_encode($response);
}
}
?>
Alguém por favor pode me ajudar ?
Hmm, então se eu usar "error" => true ele nao irá "forçar" um erro ?
Mas como eu verifico isso no success ? poderia me dar um exemplo por favor ?
Eu tentei alterar, mandar "success" => false, "msgerro" => "msg de erro" e la no success: function(... validei, se o response for false ele mostra msg de erro, se for true quer dizer que deu certo e manda msg de sucesso, mas n funciona, ele nao manda nenhuma notificacao, e la no network eu vi que ele ta retornando success: false, msgerro: "minha msg de erro" caso o cara coloque um user ja existente, e se colocar um user unico ele retorna la success: true, mas ainda n ta funcionando, pro favor me ajudem ! :/
Codigo atualizado: https://gist.github.com/anonymous/8be64b30102c5ea71582
Obrigado desde já :)
Consegui :D
Era só verificar o response no success.
Código atualizado: https://gist.github.com/anonymous/26d2238c414c93049807
Obrigado a todos.
o error e o success da função $.ajax indicam que a requisição deu certo ou não.
vc tem q verificar a resposta do seu php, dentro do success.
O error só acontecerá, qndo a requisição falhar (cair a rede, não encontrar o arquivo php..)