Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

NetBoy16

validar o php em um submit assincrono

Recommended Posts

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

meu arquivo cadastro.php

 

<?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 ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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..)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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á :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.