Ir para conteúdo

Arquivado

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

marcelocardoso

Ajax valida primeiro, envia depois ERRO

Recommended Posts

Pessoal.
Preciso de um favorzinho.
Tipo: fiz este script abaixo, onde: 
1) o formulario TERIA que validar os campos;
2) o formulario após o validate, TERIA que enviar via AJAX;

Porém, ele não valida, e também não faz o AJAX funcionar...
Instalei o PHP no IIS, e comecei a notar erros no IIS, que antes não notava...
Então, para não instalar, e verificar se não é na minha máquina o problema, poderiam testar este script na máquina de vocês???

FORM
 

<!--#include file="../inc/conexao.asp"-->

<!DOCTYPE HTML>
<html>

<head>
    <title>Administração de Conteúdo</title>
    <meta charset="utf-8">
    <meta http-equiv="x-ua-compatible" content="ie=edge, chrome=1">
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="cache-control" content="no-cache">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="googlebot" content="noarchive">
    <meta name="robots" content="all">
    <meta name="robots" content="index,nofollow">
    <meta name="robots" content="noindex,follow">
    <meta name="robots" content="none">

    <!-- INTEGRACAO -->
    <!-- fonts -->
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto" type="text/css">
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans" type="text/css">
    <!-- fonts -->

    <!-- icons -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" type="text/css">
    <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons" type="text/css">
    <!-- icons -->

    <!-- css -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" type="text/css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/7.0.0/normalize.css" media="screen">
    <link rel="stylesheet" href="../adm/css/bootstrap.min.admininstracao-site.css" media="screen">
    <!-- css -->

    <!-- jquery -->
    <script type="text/javascript" src="../adm/js/bootstrap.min.administracao-jquery.js"></script>
    <script type="text/javascript" src="../adm/js/bootstrap.min.administracao-jquery.validate.js"></script>
    <script type="text/javascript" src="../adm/js/bootstrap.min.administracao-site.js"></script>
    <!-- jquery -->
    <!-- INTEGRACAO -->

</head>

<body>



    <!-- CODE | Formulário de Login -->
    <section class="secao_altura100 parallax3">
        <div class="row">
            <div class="col-sm-6 col-md-4 col-md-offset-4">
                <div class="form-signin_contorno" style="z-index: 100;">


                    <form id="frm" role="form" class="form-signin" method="post" action="default_login.asp" style="z-index: 200;">
                        <h4 class="text-center" style="color: white;">Login Administradores</h4>
                        <input id="campo_user" name="campo_user" type="text" class="form-control" placeholder="Digite seu usuário" required autofocus>
                        <input id="campo_pass" name="campo_pass" type="password" class="form-control" placeholder="Digite sua senha" required>
                        <div class="btn-group btn-group-justified">
                            <div class="btn-group">
                                <button type="submit" class="btn btn-success btn-sm">ENTRAR</button>
                            </div>
                            <div class="btn-group">
                                <button type="button" class="btn btn-primary btn-sm" onclick="window.location='default_login.asp?menu=lembrete';">LEMBRAR SENHA</button>
                            </div>
                        </div>
                    </form>

                    <div class="col-md-12" style="bottom: 0; position: absolute;">
                        <div id="retorno" class="validate-valid-retorno"></div>
                    </div>


                </div>
            </div>
        </div>
    </section>
    <!-- CODE | Formulário de Login -->





    <!-- INTEGRACAO | plugins -->
    <script src="../adm/js/bootstrap.min.administracao.js"></script>
    <script src="../adm/js/bootstrap.min.administracao-smoothscroll.js"></script>
    <script src="../adm/js/bootstrap.min.administracao-jquery.inputmask.bundle.js"></script>
    <script type="text/javascript">
        $(window).load(function() {
            $(document).ready(function() {
                $("#frm").validate({
                    errorClass: "validate-error-class",
                    validClass: "validate-valid-class",
                    rules: {
                        campo_usuario: {
                            required: true,
                            minlength: 8,
                            maxlength: 20
                        },
                        campo_senha: {
                            minlength: 8,
                            maxlength: 20
                        },
                    },
                    messages: {
                        campo_usuario: {
                            required: "Este campo é requerido",
                            minlength: "O campo deve conter no mínimo 8 caracteres",
                            maxlength: "O campo deve conter no máximo 20 caracteres"
                        },
                        campo_senha: {
                            required: "Este campo é requerido",
                            minlength: "O campo deve conter no mínimo 8 caracteres",
                            maxlength: "O campo deve conter no máximo 20 caracteres"
                        },
                    },
                    //submitHandler: function(form) {
                    //    $.ajax({
                    //        url: form.action,
                    //        type: form.method,
                    //        data: $("#form").serialize(),
                    //        success: function(responseData) {
                    //            $('#retorno').html(responseData);
                    //        }
                    //    });
                    //},
                    submitHandler: function(form) {
                        $.ajax({
                            dataType: 'html',
                            type: form.method,
                            url: form.action,
                            data: $("#form").serialize(),
                            success: function(responseData) {
                                $('#retorno').fadeIn(1000);
                                $('#retorno').html(responseData);
                            },
                            error: function(responseData) {
                                console.log('Houve um problema no processamento do script!');
                            }
                        });
                        $('input#campo_user').val("");
                        $('input#campo_pass').val("");
                        alert('Formulário enviado com sucesso!');
                        return false;
                    },
                });
            }),
        });
    </script>
    <!-- INTEGRACAO | plugins -->



</body>

</html>
<%
        strRS.close
    SET strRS = nothing
       
        conexao.close
    SET conexao = nothing
%>

ASP
 

    <!--#include file="../inc/conexao.asp"-->

    <%
    campo_login = Request("campo_user")
    campo_senha = Request("campo_pass")
       
             SQL = "SELECT * FROM vm WHERE usuario = '"& campo_login &"' AND senha = '"& campo_senha &"'"
       SET strRS = Server.CreateObject("ADODB.RECORDSET")
           strRS.Open SQL, conexao, 3, 3
       
            IF strRS.EOF THEN
       
                 Response.Write "Senha ou Usuario Errado"
       
               ELSE
                    Session("usuario_logado") = "conectado"
                    Session("usuario_nome")   = strRS("vmares_nome")
                    Session("usuario_email")  = strRS("vmares_email")
       
                Response.Redirect "admin.asp"
       
            END IF
       
            strRS.close
        SET strRS = nothing
       
            conexao.close
        SET conexao = nothing
    %>

Se puder ajudar, agradeço ....
peguei o script ajax do STACK OVERFLOW e adaptei, mas já tentei de tudo, até mesmo exemplo pronto, e quando uso na minha máquina, não ROLA.

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No validate troque:

campo_usuario por campo_user
campo_senha por campo_pass

Compartilhar este post


Link para o post
Compartilhar em outros sites

boa MalFoy, mas ainda não cheguei no que preciso, não valida....
valida com a validação do bootstrap, e também não roda o AJAX.... vai direto para a página da URL do ajax, abrindo em outra janela...

Não sei se é minha máquina....
Se alguém testar, agradeço...

SE funcionar aí, e aqui o problema...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja o que aparece no console antes de enviar os dados

Compartilhar este post


Link para o post
Compartilhar em outros sites

coloquei um console.log(); mas ainda nada...

tentei dar refresh no navegador, testei em 3 google, firefox, ie e yandex e anda...
também limpei todo o cache do navegador... nada.

não está validando, e nem está usando o Ajax...

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
11 minutos atrás, marcelocardoso disse:

coloquei um console.log(); mas ainda nada...

 

 

Não.. apenas de um CTRL + SHIFT + J, e poste aqui o que aparece no Console do navegador.

Compartilhar este post


Link para o post
Compartilhar em outros sites

image.thumb.png.bce8bb76b16074b06bc20c30c61f6ce3.png

 

mas o interessante que o nome do ID form é FRM.
não sei oq pode estar acontecendo....

coloco as senhas corretas, ele passa e vai para a tela que tem que ir, mas não passa pelo ajax e nem exibe mensagem na tela 

Compartilhar este post


Link para o post
Compartilhar em outros sites
...
                });
            }),     <-- PONTO E VIRGULA ( ; )
        });
    </script>
    <!-- INTEGRACAO | plugins -->
....
submitHandler: function(form) { <-- CORRETO
submitHandler: function('#frm') { <-- ERRADO

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz um exemplo que agora consegui juntando aqui e alí, segue para exemplo de utilização e formatação a GOSTO.
CODIGO:
 

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>FORM | VALIDATE E AJAX SUBMIT | exibe mensagens ao final</title>


    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" type="text/css">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" type="text/css">

    <script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
    <script type="text/javascript" src="http://malsup.github.io/jquery.form.js"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.js"></script>


    <style type="text/css">
        .control-label {
            margin-top: 8px;
            margin-bottom: 8px;
        }

        .validate-valid-class {
            color: #048104;
            font-size: 90%;
            padding-left: 10px;
        }

        .validate-error-class {
            color: #bf0101;
            font-size: 90%;
            padding-left: 10px;
        }

        .validate-valid-retorno {
            padding: 10px 20px;
            border: 0;
            display: inline-block;
            margin: 20px;
            cursor: pointer;
            /*display: none;*/
            color: white;
            background-color: #048104;
            border-radius: 20px;
        }
    </style>

</head>

<body>


    <div class="col-md-9 col-md-offset-1 text-center" style="padding: 35px;">
        <h3>VALIDATE E <b>AJAX</b> SUBMIT | exibe mensagens e loading</h3>
    </div>

    <div class="col-md-8 col-md-offset-2" style="padding: 15px;">
        <form id="formulario" class="form-group" method="post" action="">

            <div class="row">
                <div class="form-group">
                    <div class="col-md-12">
                        <label class="control-label" for="campo_nome">Nome</label>
                        <input type="text" id="campo_nome" name="campo_nome" class="form-control" placeholder="Digite seu nome">
                    </div>
                </div>
                <div class="form-group">
                    <div class="col-md-12">
                        <label class="control-label" for="campo_email">Email</label>
                        <input type="text" id="campo_email" name="campo_email" class="form-control" placeholder="Digite seu email">
                    </div>
                </div>
                <div class="form-group pull-right">
                    <div class="btn-group" style="padding-top: 20px; padding: 25px;">
                        <button type="submit" class="btn btn-primary" value="Enviar">Enviar</button>
                        <button type="reset" class="btn btn-primary"><i class="fa fa-trash-o" aria-hidden="true"></i></button>
                    </div>
                </div>
            </div>

            <div id="retorno" class="col-md-12 text-center"></div>
            <div id="carregando" class="col-md-12 text-center"></div>

        </form>
    </div>

    
    


    <script type='text/javascript'>
        $(function() {
            $("#formulario").validate({
                errorClass: "validate-error-class",
                validClass: "validate-valid-class",
                rules: {
                    campo_nome: {
                        required: true,
                        minlength: 8
                    },
                    campo_email: {
                        required: true,
                        minlength: 8,
                        email: true
                    }
                },
                messages: {
                    campo_nome: {
                        required: "Este campo é requerido",
                        minlength: "O campo deve conter no mínimo 8 caracteres",
                        maxlength: "O campo deve conter no máximo 30 caracteres"
                    },
                    campo_email: {
                        required: "Este campo é requerido",
                        minlength: "O campo deve conter no mínimo 8 caracteres",
                        maxlength: "O campo deve conter no máximo 50 caracteres"
                    },
                },
                submitHandler: function(form) {

                    var formData = $(this).serialize();

                    $.ajax({
                        url: "ajax.php",
                        type: "post",
                        data: formData,

                        beforeSend: function(response) {
                            $("#carregando").html("<div id='carregando' class='col-md-12'><img src='img/carregando.gif' width='32px' height='32px' style='z-index: 100;'></div>").fadeIn(1000);
                        },

                        success: function(response) {
                            $("#carregando").hide();
                            $("#retorno").html("<div id='retorno' class='validate-valid-retorno'> <b>Enviado com sucesso!</b> </div>").fadeIn(2000).fadeOut(5000);
                        },

                        error: function(response) {
                            $("#retorno").html("<div id='retorno' class='validate-valid-retorno'> <b>Ocorreu um Erro, Tente Novamente!</b> </div>").fadeIn(1000);
                        },

                        //complete: function(data) {
                        //    alert("dados enviados");
                        //}

                    });
                    
                    $('input#campo_nome').val("");
                    $('input#campo_email').val("");
                    
                    return false;
                }

            });
        });
    </script>




</body>

</html>

Mas vou olhar tuas especificações mano MALFOY....
De maldade já estamos FARTOS, vamos trocar teu nome para BOMFOY.....

valeu, colega...
até...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora....
Como posso fazer:

1) Em caso de sucesso, após processar o arquivo ASP, que busca no banco de dados o usuário, valida, se existe, redireciona para outra página, caso contrário, mostra com RESPONSE WRITE mensagem.

2) Teria que ter dois casos daí,
1 para SUCESSO, = iria redirecionar via AJAX para a página...
2 para ERROR, = iria pegar a mensagem do response.write e jogar no error

Como posso fazer isso, tipo na TAG CODE ABAIXO:
tentei atribuir o valor RESULTADO da data no + data +, mas não vai...

 


$("#retorno").fadeIn(5000).fadeOut(9000).html("<div id='retorno' class='validate-valid-retorno'> <b>'" +  + "'</b> </div>");

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

como passar variavel aqui:
 

$("#retorno").html("<div id='retorno' class='validate-valid-retorno'> <b>'" +  + "'</b> </div>");

tipo '"+ variavel DATA +"'

ou seja, o valor que vem do ajax, no caso, o ECHO ou RESPONSE.WRITE do ASP???
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seguinte colegas...

NO CODE ABAIXO:

$.ajax({
                        url: "default_login.asp",
                        type: "post",
                        data: formData,

                        success: function(response) {

                            if (data) {
                                $(location).attr('href', response);
                                $(form)[0].reset();

                            } else {
                                $("#retorno").fadeIn().html(response);
                                setTimeout(function() {
                                    $("#retorno").fadeOut("slow");
                                }, 3000);

                            }
                        },

                        error: function(response) {
                            $("#retorno").fadeIn().html("<div id='retorno' class='validate-valid-retorno'><b>'+ response +'</b></div>");
                            setTimeout(function() {
                                $("#retorno").fadeOut("slow");
                            }, 3000);
                            $(form)[0].reset();
                        },

                    });

Alí no SUCCESS:
1) como faço para exibir vindo do ASP, tipo: se usuário não existe, ele exibe o response.write "usuário ou senha não conferem"
2) caso tenha dado tudo certo, ele redireciona, que no caso, é um RESPONSE.REDIRECT que tenho no ASP, seguindo código abaixo:

Não estou sabendo criar...
Ajuda, agradeço.

 

    <!--#include file="../inc/conexao.asp"-->
    <%
    campo_login = Request("campo_user")
    campo_senha = Request("campo_pass")
       
             SQL = "SELECT * FROM usuarios WHERE vusuario = '"& campo_login &"' AND vsenha = '"& campo_senha &"'"
       SET strRS = Server.CreateObject("ADODB.RECORDSET")
           strRS.Open SQL, conexao, 3, 3
       
            IF strRS.EOF THEN
       
                Response.Write "Senha ou Usuario Errado"
       
               ELSE
                    Session("usuario_logado") = "conectado"
                    Session("usuario_nome")   = strRS("vnome")
                    Session("usuario_email")  = strRS("vemail")
       
                Response.Redirect "admin.asp"
       
            END IF
       
            strRS.close
        SET strRS = nothing
       
            conexao.close
        SET conexao = nothing
    %>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigos e Colegas!

Para um olhar mais criterioso de todos, que manjam mais de JQUERY que eu...
Consegui desvencilhar todo o meu código que havia postado acima, porém agora...
SCRIPT funciona normal, faz td que preciso, porém, a validação nos campos, quando tento gravar no banco de dados, por mais que eu mude, tipo:

INPUT TEXT: VALUE = marcelo cardoso machado
Ele envia para o AJAX, mas acaba voltando para o texto anterior que eu havia digitado, tipo qualquer um, mas ao gravar no banco, e retornar ao registro com UPDATE feito a pouco, ele faz assim:

marcelocardosomachado. 
não deixa separado como descrevi acima.

Tirei o script, abaixo, e ele grava certinho.
Então, o erro tá no script...

 

    <script type="text/javascript">
        $(function() {
        $("#retorno_erro").hide();
        $("#retorno_erro_dados").hide();
        $("#frm").validate({
            errorClass: "validate-error-class",
            validClass: "validate-valid-class",
                rules: {
                    campo_data: {
                        required: true
                    },
                    campo_titulo: {
                        required: true,
                        minlength: 10,
                    },
                    campo_fonte: {
                        required: true,
                        minlength: 5
                    },
                    campo_descricao: {
                        required: true,
                        minlength: 10,
                        maxlength: 1000
                    },
                },
                messages: {
                    campo_data: {
                        required: "Data",
                    },
                    campo_titulo: {
                        required: "Título da notícia",
                        minlength: "O título deve conter no mínimo 10 caracteres"
                    },
                    campo_fonte: {
                        required: "Fonte da notícia",
                        minlength: "A fonte deve conter no mínimo 5 caracteres"
                    },
                    campo_descricao: {
                        required: "Descreva sua notícia",
                        minlength: "A noticia deve conter no mínimo 100 caracteres",
                        maxlength: "A noticia deve conter no máximo 20000 caracteres"
                    },
                },
                submitHandler: function(form) {
                    
                    var formdata     = $('#campo_data').val();
                    var formtitulo   = $('#campo_titulo').val();
                    var formfonte    = $('#campo_fonte').val();
                    var formmensagem = $('#campo_descricao').val();
                    
                        $.ajax({
                            url: $('#frm').attr('action'),
                            type: "post",
                            data: "campo_data=" + formdata + "&campo_titulo=" + formtitulo + "&campo_fonte=" + formfonte + "&campo_descricao=" + formmensagem,
                            success: function(response) {
                                if (response == "dados_erro") {
                                    $("#retorno_erro").html(response).fadeIn().show();
                                    setTimeout(function() {
                                        $("#retorno_erro").fadeOut("slow");
                                    }, 3000);
                                    $('#frm')[0].reset();

                                } else {
                                    $("#retorno_erro_dados").html(response).fadeIn().show();
                                    setTimeout(function() {
                                        $(location).attr('href', 'admin.asp?menu=noticias');
                                    }, 3000);
                                    $('#frm')[0].reset();
                                }
                            },
                        });
                return false;
                }
            });
        });
    </script>


Quem conhece mais de AJAX e quiser contruibuir com solução, agradeço.
Obrigado.
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ment0r
      Boa noite pessoal, tudo bem?
       
      Estou desenvolvendo um sistema simples com exibição de formulário via modal. Uma vez cadastrado o serviço (tabela possui apenas dois campos, id e nome), eles são exibidos numa tabela com um ícone que permite a alteração do nome.

       
      Eu clico no ícone e é chamado um modal que é gerado via ajax (pois são vários registros).
       

       
      Nesse modal é mostrado o serviço e uma vez alterado, o botão Salvar chama uma função que atualiza a tabela servico, concluindo a tarefa. Fiz o mesmo processo pra cadastrar o serviço, com a diferença de que o modal está presente na mesma página, ou seja, não é chamado via ajax.
       
      Eis os códigos:
      <a href="#" onclick="modalUpdate(<?= trim($array['id']) ?>)"> <i class='bx bx-edit'></i> </a> // Trecho onde eu chamo a função modalUpdate. Função btAltServico click:
      $('#btAltServico').click(function() { var inpnome = $('#nome'); var inpid = $('#id'); if (inpnome.val() == '') { swal("Atenção", "Por favor, preencha os campos obrigatórios", "warning"); if (inpnome.val() == '') { inpnome.css("border","2px solid #f94545"); } else { inpnome.css("border",""); } alert(inpnome); alert(inpid); } else { $.ajax({ url: '../inc/ajax/altServico.php', type: 'post', dataType: 'json', // pode ser html data: { nome : inpnome.val(), id : inpid.val() }, success: function(resposta){ if (resposta == 1) { inpnome.val(""); inpnome.css("border",""); swal("Sucesso", "Serviço alterado", "success"); } else { if (resposta == 0) { swal("Erro", "Serviço não alterado. Log de erro gerado.", "error"); } else { swal("Atenção", "Serviço já cadastrado", "warning"); } } } }) } });  
      E modalUpdate.php :
       
      <?php /* * altServico.php * * Script responsável pelo update de serviços na tabela servico * * Função chamada pelo arquivo ajax.js */ //if ($_POST) { require'../conn.php'; require'../../class/class.geral.php'; $geral = new Geral(); $nome = $_POST['nome']; $id = $_POST['nome']; $ativo = 1; // Verifica se o servico já foi cadastrado $sqlVer = "select nome from algo68_db_cliente.servico where nome = '".$nome."' and id <> ".$id.""; $queryVer = mysqli_query($conn, $sqlVer); $resultVer = mysqli_num_rows($queryVer); if ($resultVer > 0) { echo json_encode(2); // servico já cadastrado } else { // Update do servico $sql = "update algo68_db_cliente.servico set nome = '".$nome."', ativo = ".$ativo." where id = ".$id; $query = mysqli_query($conn, $sql); $result = mysqli_affected_rows($conn); if ($result > 0) { echo json_encode(1); // alterou o servico } else { $geral->logErro(date('d/m/Y|H:i:s'), @$_SERVER[REQUEST_URI], 'AlterarServico', mysqli_error($conn)); echo json_encode(0); // não alterou o servico } } //} ?> O problema é que quando clico no botão Salvar, não acontece nada - se eu colocar um alert qualquer na função click, só pra saber se está chegando, também não da nada. E está da mesma forma que o cadastro de serviço, que funciona perfeitamente.

      Bom, é isso pessoal, tentei ser o mais breve e especifico possível. Qualquer ajuda é bem vinda, obrigado a todos, desde já.
    • Por Danilo - Jesus voltará!
      Olá pessoal, tenho uma div a qual através de um select categorias eu trago dados de empresas do banco, aí preciso clicar nas listagens das empresas e pegar o ID quando clica no checkbox e gravar pelo ajax novamente na session feita no arquivo php tipo um carrinho de compras, que essa parte já tenho... só não to conseguindo pegar os ids gerados dinamicamente no retorno feito do ajax, eles aparecem com F12 ao inspecionar, mas não aceita eu clicar para pegar o ID, acho que é algo de DOM, mas não to sabendo fazer... alguém aí saberia me ajudar como pegar esses ids ao clicar, já que eles vem dinamicamente?
       
      obrigado
    • Por joao b silva
      <input type="text" class="form-control" id="produto" name="produto"  onblur="BuscaPr()">
       
       
      Ola. eu chamo a função JS a seguir  no onblur do input acima. cikiqyeu is alerts para confirmar a chamada da função. ta chamando. mas alem dos alerts nao acontece mais nada. segue a função JS e o arquivo php que é chamado no ajax:
       
       
      FUNSAO JS
       
          function BuscaPr(){
              var buscaTexto = document.getElementById('produto').value
              alert(buscaTexto) 
              alert(buscaTexto.length) 
              $.ajax({
                  method: 'post',
                  url: 'sistema/produto/buscapr.php',
                  data: {busca: 'sim', texto: buscaTexto},
                  dataType: 'json',
                  success: function(retorno){
                          if(retorno.qtd == 0){
                              alert('q = 0')
                                  $('#resbuscapro').html('<p>Não encontramos resultados para sua busca</p>');
                          }else{
                              alert('q + 0')
                                  $('#resbuscapro').html(retorno.dados);
                          }
                  }
              });
          }

      O ARQUIVO PHP:
       
      <?php
      if (!session_id()):
          session_start();
      endif;
      require_once('_app/Config.inc.php');
      require_once('./Lib.php');
      if (isset($_POST['busca']) && $_POST['busca'] == 'sim'):
          $textoBusca = strip_tags($_POST['texto']);
          $retorno = array();
          $Par = "EM={$_SESSION['userlogin']['emCODIGO']}";
          $Fil = " where emCODIGO = :EM and prDESCRICAO like '%{$textoBusca}%' ";
          $Produto = new Read;
          $Produto->FullRead("select * from produto {$Fil}", $Par);
          if ($Produto->getResult()):
              $retorno['qtd'] = $Produto->getRowCount();
              foreach ($Produto->getResult() as $pro):
                  extract($pro);
                  $retorno['dados'] .= '<a href="#" id='.$prCODIGO.':'.$prVENDA.'">'. utf8_encode($prDESCRICAO).'</a>';
              endforeach;
          endif;
          echo json_encode($retorno);
      endif;
      ?>
    • Por Flaviaac
      Boa tarde pessoal,
       
      Sou iniciante em Desenvolvimento Web e não estou conseguindo resolver um problema no meu código, se alguém puder me ajudar agradeço imensamente.
       

      Vamos lá!
       
      Na tela de cadastro eu tenho um campo tipo select, onde escolho o tipo de documento, e no campo de baixo eu tenho um tipo text que mostrará a quantidade de anos para descarte deste documento. Então quando o usuário selecionar um dos documentos no campo de cima automaticamente deve aparecer o valor do tempo de descarte no campo de baixo, e ai sim o usuário poderá cadastrar o documento em si.
       
      Obs.: estou ignorando o restante dos campos de cadastro pois não são relevantes para este problema.
       

       
      Este evento está funcionando perfeitamente, o problema é que quando clico no botão "cadastrar" o campo de "periodicidade de descarte" não está salvando no bando de dados com o valor exibido, mas sim como zero.
       
      No arquivo processa_cadastro.php quando dou um var_dump em $periodo_doc ele imprime: int(0)
       
       
      Não consegui identificar onde estou errando.
       
      Por favor, poderiam me dar uma luz.
      Obrigada!
       
       
       
      Segue os códigos para entendimento.
       
       
      tipo_arquivo.sql:
      -- phpMyAdmin SQL Dump -- version 5.2.0 -- https://www.phpmyadmin.net/ -- -- Host: localhost -- Tempo de geração: 12-Jul-2022 às 14:46 -- Versão do servidor: 10.4.24-MariaDB -- versão do PHP: 7.4.29 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; START TRANSACTION; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; -- -- Banco de dados: `sistemadescarte` -- -- -------------------------------------------------------- -- -- Estrutura da tabela `tipo_arquivo` -- CREATE TABLE `tipo_arquivo` ( `id_tipo` int(11) NOT NULL, `nome_tipo` varchar(255) NOT NULL, `descarte` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Extraindo dados da tabela `tipo_arquivo` -- INSERT INTO `tipo_arquivo` (`id_tipo`, `nome_tipo`, `descarte`) VALUES (1, 'Ata Extraordinária', 5), (2, 'Ata Ordinária', 5), (3, 'carta', 8), (4, 'Memorando', 10), (5, 'Memorando Circular', 8), (6, 'Ofício', 5), (7, 'Ofício Circular', 5), (8, 'Processo', 10); -- -- Índices para tabelas despejadas -- -- -- Índices para tabela `tipo_arquivo` -- ALTER TABLE `tipo_arquivo` ADD PRIMARY KEY (`id_tipo`), ADD KEY `id_tipo` (`id_tipo`); -- -- AUTO_INCREMENT de tabelas despejadas -- -- -- AUTO_INCREMENT de tabela `tipo_arquivo` -- ALTER TABLE `tipo_arquivo` MODIFY `id_tipo` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=21; COMMIT; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;  
      documento.sql:
      -- phpMyAdmin SQL Dump -- version 5.2.0 -- https://www.phpmyadmin.net/ -- -- Host: localhost -- Tempo de geração: 12-Jul-2022 às 14:47 -- Versão do servidor: 10.4.24-MariaDB -- versão do PHP: 7.4.29 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; START TRANSACTION; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; -- -- Banco de dados: `sistemadescarte` -- -- -------------------------------------------------------- -- -- Estrutura da tabela `documento` -- CREATE TABLE `documento` ( `ID_DOC` int(11) NOT NULL, `NUMERO_DOC` varchar(20) NOT NULL, `TIPO_DOC` int(11) NOT NULL, `INTERESSADO` varchar(255) NOT NULL, `TITULO` varchar(400) NOT NULL, `OBS` varchar(400) DEFAULT NULL, `PERIODICIDADE` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Extraindo dados da tabela `documento` -- INSERT INTO `documento` (`ID_DOC`, `NUMERO_DOC`, `TIPO_DOC`, `INTERESSADO`, `TITULO`, `OBS`, `PERIODICIDADE`) VALUES (2, '788741-2019/65', 1, 'admin', 'Ata extraordinária de 2018', 0), (3, '888888-2021/21', 3, 'gerencia', 'Carta a gerencia', 0), (4, '333653-2022/1', 8, 'teste', 'Processo', 'teste na observação', 0), (6, '224568-2022/3', 2, 'teste', 'Ata Ordinária', 0); -- -- Índices para tabelas despejadas -- -- -- Índices para tabela `documento` -- ALTER TABLE `documento` ADD PRIMARY KEY (`ID_DOC`), ADD KEY `TIPO_DOC` (`TIPO_DOC`); -- -- AUTO_INCREMENT de tabelas despejadas -- -- -- AUTO_INCREMENT de tabela `documento` -- ALTER TABLE `documento` MODIFY `ID_DOC` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2295; -- -- Restrições para despejos de tabelas -- -- -- Limitadores para a tabela `documento` -- ALTER TABLE `documento` ADD CONSTRAINT `documento_ibfk_1` FOREIGN KEY (`TIPO_DOC`) REFERENCES `tipo_arquivo` (`id_tipo`); COMMIT; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;  
       
      cadastro.php:
      <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script type="text/javascript" src="js/descarte.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> <title>Cadastro de Documento</title> </head> <form action="" method="post"> <div class="form-row"> <!-- tipo de documento --> <div class="form-group col-md-1"> <label>Tipo de Documento</label> <select name="tipo" id="tipo" class="form-control" onchange="funcaoDescarte()"> <option selected>Selecione...</option> <!--------------- P H P ----------------> <?php while($row = $result->fetch_assoc()) { echo "<option value=".$row['id_tipo'].">".$row['nome_tipo']."</option>"; } ?> <!--------------- F I M P H P ---------> </select> </div> </div> <div class="form-row"> <!-- tempo para descarte --> <div class="form-group col-md-2"> <span class="form-text">Periodicidade para descarte deste documento:</span> <input name="descarte" type="text" class="form-control" id="descarte" value="" disabled=""> <input type="text" readonly class="form-control-plaintext" value="Anos"> </div> </div> <!------------------- botão cadastrar e limpar ----------------------------------------------> &nbsp; </br> <div class="form-row"> <!-- Cadastrar e Limpar --> <div class="form-group col-md-4"> <button type="submit" name="cadastrar_doc" class="btn btn-primary">Cadastrar</button> <button type="reset" name="limpar_doc" class="btn btn-primary">Limpar campos</button> </div> </div> </form  
      descarte.js:
      function funcaoDescarte(){ var x = document.getElementById("tipo").value; y = $.ajax({ url:"periodicidade.php", method:"POST", data:{ id : x }, success:function(data){ $("#descarte").val(data); } }) }  
      periodicidade.php:
      <?php include_once "conexao.php"; $k = $_POST['id']; $k = trim($k); $sql = "SELECT * FROM tipo_doc WHERE id_tipo ='{$k}'"; $result = $conn->query($sql); while($row = $result->fetch_assoc()){ echo $row['descarte']; } ?>  
      processa_cadastro.php:
      <?php $tipo_doc = intval(filter_input(INPUT_POST, 'tipo', FILTER_SANITIZE_NUMBER_INT)); $periodo_doc = intval(filter_input(INPUT_POST, 'descarte', FILTER_SANITIZE_NUMBER_INT)); if(isset($_POST['cadastrar_doc'])) { if($tipo_doc !='' || $periodo_doc !='') { $stmt = $conn->prepare("INSERT INTO documento (tipo_doc, periodicidade) VALUES (?, ?)"); $stmt->bind_param("ii", $tipo_doc, $periodo_doc); $stmt->execute(); echo "<span class='alert alert-success'> Cadastrado com sucesso</span>"; $erro = mysqli_error($conn); echo "Ocorreu o seguinte erro: ", '"', $erro, '"<br>'; }else{ echo "<span class='alert alert-danger'> Não cadastrado</span>"; $erro = mysqli_error($conn); echo "Ocorreu o seguinte erro: ", '"', $erro, '"<br>'; } } $stmt->close(); $conn->close(); ?>  
       
    • Por eduardodsilvaq
      Erro retornado no console do navegador: 400 bad request
      Rastreei o erro ate essa parte no arquivo admin-ajax.php mudando o valor de resposta de 0 para 1:
      if ( is_user_logged_in() ) { // If no action is registered, return a Bad Request response. if ( ! has_action( "wp_ajax_{$action}" ) ) { wp_die( '0', 400 ); } Tentei de tudo, mas infelizmente nao entendi oq realmente significa esse login e como ele funciona.
      Vi algumas pessoas tendo problema com o host, no meu caso estou usando hostinger. (Nao creio que isso e relevante mas ta ai.)
       
      Código utilizado:
       
      Javascript
      function formValidation() { event.preventDefault(); var name = document.forms["contactForm"]["name"].value; var email = document.forms["contactForm"]["email"].value; var subject = document.forms["contactForm"]["subject"].value; var message = document.forms["contactForm"]["message"].value; document.getElementById('status').innerHTML = ''; var errorMessage="<span class='error'>All fields are required.</span>"; var regEx = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/; if (name.trim() == "" ||email.trim() == "" || subject.trim() == "" || message.trim() == "") { document.getElementById('status').innerHTML = errorMessage; return false; } if (!regEx.test(email)) { var errorMessage="<span class='error'>Invalid email.</span>"; document.getElementById('status').innerHTML = errorMessage; return false; } processContactSubmit(); return true; } function processContactSubmit() { var request = new XMLHttpRequest(); request.open("POST", "/wp-admin/admin-ajax.php?action=process_contact_form"); request.onreadystatechange = function() { if(this.readyState === 4 && this.status === 200) { document.getElementById("status").innerHTML = this.responseText; } }; var myForm = document.getElementById("contactForm"); var formData = new FormData(contactForm); request.send(formData); } functions.php
      add_action('wp_ajax_nopriv_process_contact_form', 'process_contact_form'); add_action('wp_ajax_process_contact_form', 'process_contact_form'); //Retirar essa parte para error no console, no contrario ira aparecer no navegador o numero 0. function process_contact_form() { $to = "Recipient Email Address"; $subject = $_POST["subject"]; $headers = "Testing"; $message = $_POST["message"]; $attachments = ""; $sent = wp_mail($to, $subject, $message, $headers, $attachments); if (! $sent) { echo "<span class='error'>Problem in sending mail.</span>"; } else { echo "<span class='success'>Hi, thank you for the message.</span>"; } wp_die(); } Html
      <form name="contactForm" id="contactForm" method="post" onsubmit="return formValidation()" action=""> <p class="comment-form-comment"><textarea id="message" name="message" required="" placeholder="" aria-required="true"></textarea></p> <p class="comment-form-author"><label for="author">Nome: </label> <input id="name" name="name" required="" size="30" type="text" value=" " /></p> <p class="comment-form-author about"><label for="author">Assunto: </label> <input id="subject" name="subject" required="" size="40" type="text" value=" " /></p> <p class="comment-form-email"><label for="email">Email: </label> <input id="email" name="email" required="" size="30" type="text" value="" /></p> <p class="form-submit"><input id="submit" class="submit" name="email_contato" type="submit" value="Enviar" /></p> </form>&nbsp; <h3><div id="status"></div></h3>  
×

Informação importante

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