Ir para conteúdo

Arquivado

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

manolegal

Mostrar mensagem validação PHP

Recommended Posts

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

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

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

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

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

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

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

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

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

×

Informação importante

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