manolegal 12 Denunciar post Postado Setembro 17, 2016 Bom dia Estou realizando o cadastro de dados utilizando ajax. Está funcionando certo a inserção dos dados. O que ainda não consegui e gostaria, é quando da validação dos dados em PHP, fosse mostrada a mensagem de validação no formulário. Meu formulário <div id="mensagem"></div> <form method="post" id="form_mod_pess_cad" nome="form_mod_pess_cad" action="ajx_pes_cad.php"> <div class="row"> <div class="col-md-6" form-group> <label for="pessoa_nome">Nome</label> <input class="form-control" type="text" id="pessoa_nome" name="pessoa_nome" autofocus placeholder="Informe o Nome da Pessoa... (Obrigatório)" required maxlength="50" onfocus="mudacor(this,'#DCDCDC')" onblur="mudacor(this,'white')" onkeypress="return handleEnter(this, event)"> </div> </div> <!-- /row --> <div class="row"> <div class="col-md-6" form-group> <label for="teste_coluna">Teste</label> <input class="form-control" type="text" id="teste_coluna" name="teste_coluna" placeholder="Informe o Nome da Pessoa... (Obrigatório)" required maxlength="50" onfocus="mudacor(this,'#DCDCDC')" onblur="mudacor(this,'white')" onkeypress="return handleEnter(this, event)"> </div> </div> <!-- /row --> <div class="row"> <div class="col-md-4 col-xs-offset-6"> <button type="button" class="btn btn-primary" onclick="javascript:enviar();">Cadastrar</button> </div> </div> </form> <script type="text/javascript"> function enviar(){ var pessoa_nome = document.getElementById('pessoa_nome').value; var teste_coluna = document.getElementById('teste_coluna').value; $.ajax({ type:'POST', url:'ajx_pes_cad.php', data:('pessoa_nome='+pessoa_nome+'&teste_coluna='+teste_coluna), success:function(resposta){ if (resposta==1){ $('#mensagem').html('Cadastro efetuado com sucesso'); document.getElementById('pessoa_nome').value=""; document.getElementById('teste_coluna').value=""; } else{ $('#mensagem').html('Erro de cadastro.'); } } }) } </script> ajx_pes_cad.php if (isset($_POST['pessoa_nome']) && ($_POST['teste_coluna']!="")){ $pessoa_nome = $_POST['pessoa_nome']; $teste_coluna = $_POST['teste_coluna']; if (strlen($pessoa_nome)<7){ $erro=1; $msg_erro = "Nome inválido!"; // GOSTARIA QUE APARECESSE ESTA MENSAGEM NO MEU FORMÁRIO } if (($erro==0) AND (!isset($msg_erro))){ $Sql = "INSERT INTO aaa_teste (coluna_teste, teste_coluna) VALUES ('$pessoa_nome', '$teste_coluna')"; $Resultado = executa($Sql); if ($Resultado) { echo "1"; } else{ echo "0"; } } } A minha dúvida é como mostrar $msg_erro = "Nome inválido!"; no meu formulário, ao invés de $('#mensagem').html('Erro de cadastro.'); Compartilhar este post Link para o post Compartilhar em outros sites
manolegal 12 Denunciar post Postado Setembro 20, 2016 Tentei alterar para: <button type="button" class="btn btn-primary" id="send">Cadastrar</button> <script type="text/javascript"> $(document).ready(function(){ $("#send").click(function(){ var pessoa_nome = $("#pessoa_nome").val(); var teste_coluna = $("#teste_coluna").val(); var msg = $("#mensagem").val(); $.ajax({ type: "POST", url: "ajx_pes_cad.php", data: "pessoa_nome="+pessoa_nome+"&teste_coluna="+teste_coluna+"&mensagem="+msg, success: function(data){ $("#mensagem").html(data); } }); }); }); </script> Mas também não mostra a mensagem. Compartilhar este post Link para o post Compartilhar em outros sites
Joel F 6 Denunciar post Postado Setembro 20, 2016 Boa tarde, O que vai ter no data do success é o que o arquivo php printa. Ou seja altera essa parte do código: if (strlen($pessoa_nome)<7){ $erro=1; $msg_erro = "Nome inválido!"; // GOSTARIA QUE APARECESSE ESTA MENSAGEM NO MEU FORMÁRIO } para if (strlen($pessoa_nome)<7){ $erro=1; echo "Nome inválido!"; } Não diria que esta seja a melhor solução, mas é a mais simples para o que você precisa. Compartilhar este post Link para o post Compartilhar em outros sites
manolegal 12 Denunciar post Postado Setembro 20, 2016 Olá. Obrigado pelo retorno. Tentei desta forma mas não funcionou. Compartilhar este post Link para o post Compartilhar em outros sites
Joel F 6 Denunciar post Postado Setembro 21, 2016 Olá. Obrigado pelo retorno. Tentei desta forma mas não funcionou. Da um alert(data) dentro da function success e coloca aqui o que deu. Essa parte do seu código também tem um erro: if (($erro==0) AND (!isset($msg_erro))) Você ta comparando se erro é igual a 0 mas erro só e definida caso exista um erro e nesse caso erro recebe o valor de 1. Acho que seu código ficaria lógico se você colocasse. if (isset($_POST['pessoa_nome']) && ($_POST['teste_coluna']!="")): $pessoa_nome = $_POST['pessoa_nome']; $teste_coluna = $_POST['teste_coluna']; $erro = 0 //...Define valor padrão para 0 como default; if (strlen($pessoa_nome) < 7): $erro = 1; //muda valor de erro para 1 echo = "Nome inválido!"; endif; if ($erro==0): //...Se erro igual a 0; $Sql = "INSERT INTO aaa_teste (coluna_teste, teste_coluna) VALUES ('$pessoa_nome', '$teste_coluna')"; $Resultado = executa($Sql); if ($Resultado): echo "1"; else: echo "0"; endif; endif; endif Se mesmo assim não printar nada então coloque um echo 'texte' antes do primeiro if no php. Se printar então significa que o problema esta na hora que você passa as variáveis via ajax: tente mudar o código ajax passando para o parâmetro data como json. $.ajax({ type: "POST", url: "ajx_pes_cad.php", data: { "pessoa_nome" : pessoa_nome, "teste_coluna" : teste_coluna, "mensagem" : msg } success: function(data){ $("#mensagem").html(data); } }); Compartilhar este post Link para o post Compartilhar em outros sites
manolegal 12 Denunciar post Postado Setembro 21, 2016 Seguindo suas dicas e realizando algumas adaptações fiz da seguinte forma: if ($_SERVER['REQUEST_METHOD'] == "POST") { $pessoa_nome = $_POST['pessoa_nome']; $teste_coluna = $_POST['teste_coluna']; $erro=0; if (empty($pessoa_nome)){ $erro=1; $msg_erro[] = "<center><b><font color=#FF0000>Informe o Nome!</font></b></center>"; //echo"Informe o nome!"; } if (strlen($pessoa_nome)<7){ $erro=1; $msg_erro[] = "<center><b><font color=#FF0000>Nome inválido!</font></b></center>"; //echo "Nome inválido!"; } if (($erro==1)){ foreach ($msg_erro as $msg_erro => $valor){ echo "$valor"; } } if (($erro==0) AND (!isset($msg_erro))){ $Sql = "INSERT INTO aaa_teste (coluna_teste, teste_coluna) VALUES ('$pessoa_nome', '$teste_coluna')"; $Resultado = executa($Sql); // @ (arroba) - se função der erro, não mostra erros para usuário if ($Resultado) { echo "Cadastro efetuado com sucesso!"; } else{ echo "Não foi possível realizar o cadastro!"; } } } Ajax $("#send").click(function(){ var pessoa_nome = $("#pessoa_nome").val(); var teste_coluna = $("#teste_coluna").val(); var msg = $("#mensagem").val(); $.ajax({ type: "POST", url: "ajx_pes_cad.php", data: "pessoa_nome="+pessoa_nome+"&teste_coluna="+teste_coluna+"&mensagem="+msg, success: function(data){ $("#mensagem").html(data); } }); }); As mensagens estão aparecendo corretamente no formulário conforme gostaria. Antes de fechar o tópico gostaria de saber como faço para LIMPAR os campos, caso o cadastro seja realizado corretamente. Gostaria também de saber se há alguma sugestão que possa melhorar o código. Abraços. Compartilhar este post Link para o post Compartilhar em outros sites
Joel F 6 Denunciar post Postado Setembro 22, 2016 Para limpar o campo é só por no success: success: function(data){ if(data === 1){ $("#id_nome_do_campo").val(""); } } Parra melhorar o seu código assiste uns video sobre $_POST[] e sobre a função javascript serialize() Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Setembro 22, 2016 Ao invés de printar tudo no PHP (o que não é uma boa prática), retorne as informações em JSON. No PHP (apenas como exemplo): echo json_encode(['success' => false , 'message' => 'Erro ao validar...']); O PHP não pode retornar nada além do json. No javascript, mude o retorno para json: $.ajax( dataType: 'JSON' Faça a validação: success: function(data) { if (data.success) { /** código de sucesso**/ } else { alert(data.message); } } É a melhor forma de ter retornos consistentes do PHP para o JavaScript. Compartilhar este post Link para o post Compartilhar em outros sites
manolegal 12 Denunciar post Postado Outubro 21, 2016 Bom dia amigos. Obrigado pela força. Em relação a JSON, $_POST[] e serializa vou estudar. Em relação a limpar os campos, tentei da seguinte forma mas não funcionou: success: function(data){ $("#mensagem").html(data); if(data === 1){ $("#pessoa_nome").val(""); $("#teste_coluna").val(""); } } No aguardo. Valeu. Compartilhar este post Link para o post Compartilhar em outros sites
manolegal 12 Denunciar post Postado Outubro 21, 2016 Problema resolvido. Alterei if(data === 1){ Por: if(data === "Cadastro efetuado com sucesso!"){ Obrigado a todos os amigos pela ajuda. Compartilhar este post Link para o post Compartilhar em outros sites