Jquery and PHP validation does not work

Asked

Viewed 236 times

-4

Colleagues

I have this form:

<form method="post" name="form" id="formulario" action="javascript:func()">
                    <label>Razão social</label>
                    <span class="color-red">*</span>
                    <div class="row margin-bottom-20">
                        <div class="col-md-8 col-md-offset-0">
                            <input name="RazaoSocial" id="razaoSocial" class="form-control" type="text">
                        </div>
                    </div>

                    <label>CNPJ<span class="color-red">*</span></label>
                    <div class="row margin-bottom-20">
                        <div class="col-md-8 col-md-offset-0">
                            <input name="CNPJ" id="cnpj" class="form-control" type="text">
                        </div>
                    </div>

                    <label>Telefone comercial<span class="color-red">*</span></label>
                    <div class="row margin-bottom-20">
                        <div class="col-md-8 col-md-offset-0">
                            <input name="FoneComercial" id="foneComercial" class="form-control" type="text">
                        </div>
                    </div>

                    <label>Telefone celular<span class="color-red">*</span></label>
                    <div class="row margin-bottom-20">
                        <div class="col-md-8 col-md-offset-0">
                            <input name="FoneCelular" id="foneCelular" class="form-control" type="text">
                        </div>
                    </div>

                    <label>Nome do responsável<span class="color-red">*</span></label>
                    <div class="row margin-bottom-20">
                        <div class="col-md-8 col-md-offset-0">
                            <input name="NomeResponsavel" id="nomeResponsavel" class="form-control" type="text">
                        </div>
                    </div>

                    <label>Mensagem<span class="color-red">*</span></label>
                    <div class="row margin-bottom-20">
                        <div class="col-md-8 col-md-offset-0">
                            <textarea name="Mensagem" id="mensagem" rows="8" class="form-control"></textarea>
                        </div>
                    </div>                  
                    <p><button type="submit" name="btnEnviar" class="btn btn-primary">Enviar</button></p>
                </form>

I’m using the bootstrap, so I call the function that way:

<script type="text/javascript" src="assets/js/jquery.min.js" ></script>
<script type="text/javascript" src="assets/js/bootstrap.min.js" ></script>

   <script type="text/javascript" language="javascript">
$(function($) {
    // Quando o formulário for enviado, essa função é chamada
    $("#formulario").submit(function() {
        // Colocamos os valores de cada campo em uma váriavel para facilitar a manipulação
        var razaoSocial = $("#razaoSocial").val();
        var cnpj = $("#cnpj").val();
        var foneComercial = $("#foneComercial").val();
        var foneCelular = $("#foneCelular").val();
        var nomeResponsavel = $("nomeResponsavel").val();
        var mensagem = $("mensagem").val();

        // Exibe mensagem de carregamento
        $("#status").html("<img src='imagens/ajax-loader.gif' alt='Enviando' />");
        // Fazemos a requisão ajax com o arquivo envia.php e enviamos os valores de cada campo através do método POST
        $.post('enviar.php', {razaoSocial: razaoSocial, cnpj: cnpj, foneComercial: foneComercial, foneCelular: foneCelular, nomeResponsavel: nomeResponsavel, mensagem: mensagem }, function(resposta) {
                // Quando terminada a requisição
                // Exibe a div status
                $("#status").slideDown();
                // Se a resposta é um erro
                if (resposta != false) {
                    // Exibe o erro na div
                    $("#status").html(resposta);
                } 
                // Se resposta for false, ou seja, não ocorreu nenhum erro
                else {
                    // Exibe mensagem de sucesso
                    $("#status").html("<span style=\"color:#006400\">Mensagem enviada com sucesso!</span>");
                    // Coloca a mensagem no div de mensagens
                    // Limpando todos os campos
                    $("#formulario").reset();
                }
        });
    });
});
</script>

And finally, PHP:

<?php

if(filter_input(INPUT_POST,"btnEnviar")){
    if(strlen(filter_input(INPUT_POST,"RazaoSocial")) < 5){
        echo "A razão social não pode ser inferior a 5 caracteres";
    }else if(strlen(filter_input(INPUT_POST,"CNPJ")) < 18){
        echo "CNPJ inválido";
    }else if(strlen(filter_input(INPUT_POST,"FoneComercial")) < 13){
        echo "Telefone comercial inválido"; 
    }else if(strlen(filter_input(INPUT_POST,"FoneCelular")) < 14){
        echo "Telefone celular inválido";
    }else if(strlen(filter_input(INPUT_POST,"NomeResponsavel")) < 5){
        echo "O nome do responsável não pode ser inferior a 5 caracteres";
    }else if(strlen(filter_input(INPUT_POST,"Mensagem")) < 5){
        echo "A mensagem não pode ser inferior a 5 caracteres";
    }else{
        //
    }

}

?>

Even sending with empty fields, the message "Message sent successfully" appears, IE, is not validating...

  • Probably because jquery returns true if the POST request is successful, independent of the validations you are making in PHP. Maybe you should check if the post request is true, and display the message, and return in php the "message sent successfully".

  • Sorry Diego... I couldn’t understand...

  • When you make a post via ajax, if the server to which you made the request does not return error, Ajax returns true, so it does not enter if. Take the test, for example, by informing an invalid PHP page in Ajax.

  • @Jose.Marcos your ajax should return a json or else the content of the page should return a value that you can validate. ex: if the request is all right and returns 200 OK, the response variable will come with the content of the page you requested so if in PHP validation you return an "invalid CNPJ" string the return variable will have the content "Invalid CNPJ". Then it would be interesting to return a json like: {errors: true, messages: ["Invalid CNPJ",...]} hence in your js you get this: reposta.errors != false

  • It can return string as well as it is doing, just need to understand that the ajax sequence is from the request, not from the validation it does in php.

1 answer

1


Addendums to help you:

  • search the web for javascript validations for CNPJ
  • use the makedinput to include mascara in the fields
  • Differentiate variable name from objects for easy handling
  • Always validate on the client side and on the server, this prevents the smarties from detonating your database
  • Always process the information received from the form (on your.php page) when possible by deleting apostrophes(') and/or special characters if not required
  • Tip how you use bootstrap, see the API how to improve warnings/error messages because the Alert I put in is out of standard
  • NOTE: To see it working, comment all the code /* $.post() */, blz.

  • on the.php page, I think it is best to receive the information in variables and then use it in validations, CRUD, etc...

I hope I helped, read carefully the commented tips I put

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>slider</title>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
        <script src="js/jquery.maskedinput.min.js"></script>
        <script>
            $(document).ready(function(){
                // Quando o formulário for enviado, essa função é chamada
                $("#formulario").submit(function() {
                    // Colocamos os valores de cada campo em uma váriavel para facilitar a manipulação
                    // Procure utilizar o nome das variaveis diferentes do nomes dos objetos isso facilita muito        
                    // Outro ponto que você esqueceu de colocar foi a  #(tralha) para referenciar os campos nomeResponsavel e mensagem
                    var RazaoSocial = $("#razaoSocial");
                    var Cnpj = $("#cnpj");
                    var FoneComercial = $("#foneComercial");
                    var FoneCelular = $("#foneCelular");
                    var NomeResponsavel = $("#nomeResponsavel");
                    var Mensagem = $("#mensagem");
                    var btn = $("#btnEnviar");
                    // Desativa o botão para evitar vários clicks
                    btn.attr({'disabled':true});

                    // length = indica o tamanho/quantidade
                    if( RazaoSocial.val().length < 5){
                        alert("A razão social não pode ser inferior a 5 caracteres");
                        RazaoSocial.focus(); // aponta/foca no campo para ser corrigido
                        btn.attr({'disabled':false}); // restaura o botão para permitir novo envio de dados
                        return false;
                    }else if(Cnpj.val().length < 18){
                        alert("CNPJ inválido");
                        Cnpj.focus();
                        btn.attr({'disabled':false});
                        return false;
                    }else if(FoneComercial.val().length < 13){
                        alert("Telefone comercial inválido"); 
                        FoneComercial.focus();
                        btn.attr({'disabled':false});
                        return false;
                    }else if(FoneCelular.val().length < 14){
                        alert("Telefone celular inválido");
                        FoneCelular.focus();
                        btn.attr({'disabled':false});
                        return false;
                    }else if(NomeResponsavel.val().length < 5){
                        alert("O nome do responsável não pode ser inferior a 5 caracteres");
                        NomeResponsavel.focus();
                        btn.attr({'disabled':false});
                        return false;
                    }else if(Mensagem.val().length < 5){
                        alert("A mensagem não pode ser inferior a 5 caracteres");
                        Mensagem.focus();
                        btn.attr({'disabled':false});
                        return false;
                    }else{
                        btn.attr({'disabled':true}); // persiste desativado até a conclusão do envio das informações
                        // Exibe mensagem de carregamento
                        $("#status").html("<img src='imagens/ajax-loader.gif' alt='Enviando' />");
                        // Fazemos a requisão ajax com o arquivo envia.php e enviamos os valores de cada campo através do método POST

                        //Para não ocorrer problemas no envio das informações utilizo sempre
                        // conteudo : "\'" + Conteudo + "\'"
                        // inteiro : Inteiro
                        // ou seja para todo campo contendo texto ou caracteres especiais envio desta forma "\'" + Conteudo + "\'"
                        // na página que irá receber as informações é necessário eliminar com replace os apóstrofos(')                  

                        $.post('enviar.php', { 
                            razaoSocial     : "\'" + RazaoSocial.val() + "\'",
                            cnpj            : "\'" + Cnpj.val() + "\'", 
                            foneComercial   : "\'" + FoneComercial.val() + "\'", 
                            foneCelular     : "\'" + FoneCelular.val() + "\'", 
                            nomeResponsavel : "\'" + NomeResponsavel.val() + "\'",
                            mensagem        : "\'" + Mensagem.val() + "\'" 
                        }, function(resposta) {
                            // Quando terminada a requisição // Exibe a div status
                            $("#status").slideDown();
                            // Se a resposta é um erro
                            if (resposta != "false") { // Exibe o erro na div
                                $("#status").html(resposta);
                            } 
                            else {// Se resposta for false, ou seja, não ocorreu nenhum erro // Exibe mensagem de sucesso
                                $("#status").html("<span style=\"color:#006400\">Mensagem enviada com sucesso!</span>");
                                // Coloca a mensagem no div de mensagens // Limpando todos os campos

                                // Creio que não funcione corretamente o reset dependendo da versão do jquery
                                $("#formulario").reset();
                                // para resolver isso creio ser melhor fazer o simples
                                //$('#razaoSocial,#cnpj,#foneComercial,#foneCelular,#nomeResponsavel,#mensagem').val('');
                                btn.attr({'disabled':false}); // ativo o botão para novo envio
                            }
                        });                     
                    }
                });
            });
        </script>
    </head>
    <!-- Para evitar colocar mais informação que o campo no banco suporta sempre utilize nos campos input o atributo maxlength -->
    <body>
        <form method="post" name="form" id="formulario" action="javascript:func()">
                    <label>Razão social</label>
                    <span class="color-red">*</span>
                    <div class="row margin-bottom-20">
                        <div class="col-md-8 col-md-offset-0">
                            <input name="razaoSocial" id="razaoSocial" class="form-control" type="text" maxlength="250">
                        </div>
                    </div>

            <label>CNPJ<span class="color-red">*</span></label>
            <div class="row margin-bottom-20">
                <div class="col-md-8 col-md-offset-0">
                    <input name="cnpj" id="cnpj" class="form-control" type="text" maxlength="18">
                </div>
            </div>

            <label>Telefone comercial<span class="color-red">*</span></label>
            <div class="row margin-bottom-20">
                <div class="col-md-8 col-md-offset-0">
                    <input name="foneComercial" id="foneComercial" class="form-control" type="text" maxlength="13">
                </div>
            </div>

            <label>Telefone celular<span class="color-red">*</span></label>
            <div class="row margin-bottom-20">
                <div class="col-md-8 col-md-offset-0">
                    <input name="foneCelular" id="foneCelular" class="form-control" type="text" maxlength="14">
                </div>
            </div>

            <label>Nome do responsável<span class="color-red">*</span></label>
            <div class="row margin-bottom-20">
                <div class="col-md-8 col-md-offset-0">
                    <input name="nomeResponsavel" id="nomeResponsavel" class="form-control" type="text" maxlength="250">
                </div>
            </div>

            <label>Mensagem<span class="color-red">*</span></label>
            <div class="row margin-bottom-20">
                <div class="col-md-8 col-md-offset-0">
                    <textarea name="mensagem" id="mensagem" rows="8" class="form-control"></textarea>
                </div>
            </div>                  
            <p><input type="submit" name="btnEnviar" id="btnEnviar" class="btn btn-primary" value="Enviar" /></p>
        </form>
    </body>
</html>
  • Thank you to all colleagues.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.