Ir para conteúdo
marcelocardoso

Google Recaptcha V3 - Param não resgata

Recommended Posts

olá colegas.

depois de tanto quebrar a cabeça com o RECAPTCHA do google, v3.
não estou conseguindo resgatar o ID do INPUT hidden que guarda o TOKEN!!!!

Segue código
HTML
 

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

    <head>
        <meta charset="utf-8">
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
        <meta content="ie=edge" http-equiv="X-UA-Compatible">
        <title>Google Recaptcha - v3</title>

        <!-- STYLES CSS -->
        <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css">
        <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/inputmask@3.3.11/css/inputmask.min.css">
        <!-- STYLES CSS -->

        <!-- SCRIPTS JS -->
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery/dist/jquery.min.js"></script>
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery-form@4.2.2/dist/jquery.form.min.js"></script>
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery-validation@1.19.1/dist/jquery.validate.min.js"></script>
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery-validation@1.19.1/dist/localization/messages_pt_BR.min.js"></script>
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery-validation@1.19.1/dist/additional-methods.min.js"></script>
        <!-- SCRIPTS JS -->

        <!-- SCRIPTS RECAPTCHA - SITE KEY -->
        <script src="https://www.google.com/recaptcha/api.js?render=6LesQewUAAAAAIWQKRKk19yob6G8hx3LEoYXybIC"></script>
        <!-- SCRIPTS RECAPTCHA - SITE KEY -->

        <style type="text/css">
            *:focus {
                outline: none !important;
            }

            html,
            body {
                height: 100%;
                width: 100%;
            }

            body {
                color: darkgrey;
                margin: 60px 0px;
                -webkit-font-smoothing: antialiased;
                -moz-osx-font-smoothing: grayscale;
            }

            /* google captcha - hidden na tela */
            .grecaptcha-badge {
                display: none !important;
            }

            .valid-class {
                color: #006400;
                padding-left: 12px;
                padding-top: 3px;
                font-size: 15px;
                display: block;
            }

            .error-class {
                color: #e33d00;
                padding-left: 12px;
                padding-top: 3px;
                font-size: 15px;
                display: block;
            }

            .loading {
                position: fixed;
                left: 0px;
                top: 0px;
                margin: 0px;
                width: 100%;
                height: 100%;
                display: block;
                z-index: 999999;
                opacity: 0.92;
                -moz-opacity: 0.92;
                filter: alpha(opacity=98);
                background-color: #00224b;
                background-image: url("img/loading.gif");
                background-repeat: no-repeat;
                background-position: 50% 50%;
                text-align: center;
                overflow: hidden;
                font-weight: bold;
                font-size: 25px;
                color: white;
                padding-top: 25%;
            }

        </style>
    </head>

    <body>


        <!-- code | formulario -->
        <section class="container-fluid">
            <h1 class="text-center">RECAPTCHA</h1>
            <h4 class="text-center">GOOGLE v3</h4>
            <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-xs-12">
                <form id="frm_form_contato" method="post" action="inc/google-form.asp">
                    <div class="form-group">
                        <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-xs-12 mb-2">
                            <label class="control-label" for="campo_nome">Nome</label>
                            <input type="text" id="campo_nome" name="campo_nome" class="form-control" autocomplete="name" placeholder="Digite seu nome">
                        </div>
                        <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-xs-12 mb-2">
                            <label class="control-label" for="campo_email">Email</label>
                            <input type="text" id="campo_email" name="campo_email" class="form-control" autocomplete="email" placeholder="Digite seu e-mail">
                        </div>
                        <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-xs-12 mb-2">
                            <label class="control-label" for="campo_mensagem">Mensagem</label>
                            <textarea type="text" id="campo_mensagem" name="campo_mensagem" class="form-control" placeholder="Descreva sua mensagem"></textarea>
                        </div>
                        <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 mt-4">
                            <div id="contato_retorno"></div>
                            <button id="btn-form" type="submit" class="btn btn-block btn-md btn-success">ENVIAR</button>
                        </div>
                    </div>

                    <input type="hidden" id="token">
                </form>
            </div>
            <div id="contato_carregando"></div>
        </section>
        <!-- code | formulario -->





        <!-- GOOGLE reCAPTCHA -->
        <script type="text/javascript">
            "use strict";

            //formulario de validacao
            $("#frm_form_contato").validate({
                errorClass: "error-class",
                validClass: "valid-class",

                onkeyup: function (element) {
                    this.element(element);
                },

                onfocusout: function (element) {
                    this.element(element);
                },

                rules: {
                    campo_nome: {
                        required: true,
                        minlength: 5,
                        maxlength: 50
                    },

                    campo_email: {
                        required: true,
                        minlength: 5,
                        email: true
                    },

                    campo_mensagem: {
                        required: true,
                        minlength: 5,
                        maxlength: 5000
                    }
                },

                submitHandler: function (form) {
                    grecaptcha.ready(function () {
                        grecaptcha.execute('6LesQewUAAAAAIWQKRKk19yob6G8hx3LEoYXybIC', {
                            action: 'homepage'
                        }).then(function (token) {
                            $("input#token").attr({
                                "value": "" + token + ""
                            });
                        });
                    });

                    // A) resgatar variaveis (uma por uma)
                    var form_url = $(this).attr("action");
                    var form_method = $(this).attr("method");
                    var form_token = $(this).find('input[name="token"]').val();
                    var form_nome = $(this).find('input[name="campo_nome"]').val();
                    var form_email = $(this).find('input[name="campo_email"]').val();
                    var form_telefone = $(this).find('input[name="campo_telefone"]').val();
                    var form_mensagem = $(this).find('input[name="campo_mensagem"]').val();

                    // B) resgatar variaveis (tudo de uma vez)
                    // var form_data = $("#frm_form_contato").serializeArray();

                    var form_data = {
                        'campo_nome': $("#campo_nome").val(),
                        'campo_email': $("#campo_email").val(),
                        'campo_mensagem': $("#campo_mensagem").val(),
                        'campo_token': $("#token").val(),
                    };


                    // ENVIAR FORM com POST
                    // $("form").submit(function (e) {
                    //     e.preventDefault();
                    //     var $form = $(this);
                    //     $.post($form.attr("action"), $form.serialize()).then(function () {});
                    // });


                    //ENVIAR FORM com AJAX
                    $.ajax({
                        url: $("#frm_form_contato").attr("action"),
                        type: $("#frm_form_contato").attr("method"),
                        data: JSON.stringify(form_data),
                        dataType: 'json',
                        contentType: 'application/json; utf-8',

                        //loading antes do sucesso e do envio
                        beforeSend: function () {
                            $("#btn-form").prop("disabled", false).text('Enviando ...').fadeIn();
                            $("#contato_carregando").html("<div class='loading'></div>").fadeIn(500);
                        },

                        //se houver sucesso
                        success: function (response) {
                            setTimeout(function () {
                                $("#contato_carregando").fadeOut(250);
                            }, 3950);

                            setTimeout(function () {
                                $("#contato_retorno").html("<div class='valida_a_certo'>" + response + "</div>").fadeIn(500);
                            }, 4000);

                            setTimeout(function () {
                                $("#contato_retorno").fadeOut(500);
                                $("#btn-form").prop("disabled", false).text('Enviado');
                                $(form)[0].reset();
                            }, 10000);
                        },

                        //se houver sucesso, finaliza
                        complete: function (response) {
                            $('body').fadeTo(4000, '1');
                        },

                        //se houver erro
                        error: function (response) {
                            setTimeout(function () {
                                $("#contato_retorno").html("<div class='valida_a_erro'>" + response + "</div>").fadeIn(500);
                            }, 4000);

                            setTimeout(function () {
                                $("#contato_retorno").fadeOut(500);
                                $(form)[0].reset();
                            }, 10000);
                        },
                    });
                    return false;
                }
            });

        </script>

        <!-- SCRIPTS RODAPE -->
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/js/bootstrap.min.js"></script>
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/inputmask@3.3.11/dist/jquery.inputmask.bundle.js"></script>
        <!-- SCRIPTS RODAPE -->

    </body>

</html>

BACKEND - ASP
não estou conseguindo repassar o TOKEN para cá, já tentei de várias formas... 
mas não consigo nem com REQUEST.QUERYSTRING, REQUEST e nem REQUEST.FORM.


 

<%
   Response.LCID = 1033 'USA LCID
IF Request.ServerVariables("SERVER_NAME") <> Request.ServerVariables("SERVER_NAME") THEN
   Response.Write "ACESSO RESTRITO!"
ELSE

   G_TOKEN      = Request.Form("campo_token")                                 'google token
   G_KEY_URL    = "https://www.google.com/recaptcha/api/siteverify?secret="   'google url
   G_KEY_SITE   = ""                  'google chave do site
   G_KEY_SECRET = ""                  'google chave secreta

   IF Request.ServerVariables("REQUEST_METHOD") = "POST" THEN
      SET objXML = Server.CreateObject("MSXML2.ServerXMLHTTP")
          objXML.Open "GET", ""& G_KEY_URL & G_KEY_SECRET &"&response=" & G_TOKEN & "", false
          objXML.Send
      
         IF InStr(objXML.ResponseText, "TRUE") THEN
            campo_nome      = Request.Form("campo_nome")
            campo_email     = Request.Form("campo_email")
            campo_mensagem  = Replace(Request.Form("campo_mensagem"), Chr(13), "<br>") 

                 cdoSERVER  = "mail.teste.com.br"
                 cdoORIGEM  = "teste@teste.com.br"
                 cdoPASS    = "senha"
                 cdoPORT    = 587
                 cdoTIMEOUT = 120
                 cdoUSING   = 2
                 cdoAUT     = 1
                 cdoSSL     = 0

                 cdoDE      =  campo_nome &" <"& campo_email &">"
                 cdoPARA    = "teste@teste.com.br"
                 cdoASSUNTO = "teste - contato"
                 cdoTEXT    = "Envio de mensagem usando CDOSYS"

            SET objCDOSYSmail = Server.CreateObject("cdo.message")
            SET objCDOSYScon  = Server.CreateObject("cdo.configuration")

                objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport")          = cdoPORT
                objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing")               = cdoUSING
                objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate")        = cdoAUT
                objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout")   = cdoTIMEOUT
                objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl")              = cdoSSL
                objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver")              = cdoSERVER
                objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername")            = cdoORIGEM
                objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword")            = cdoPASS
                objCDOSYScon.Fields.Update

            SET objCDOSYSmail.Configuration    = objCDOSYScon
                objCDOSYSmail.From             = cdoORIGEM
                objCDOSYSmail.To               = cdoPARA
                objCDOSYSmail.Subject          = cdoASSUNTO
                objCDOSYSmail.TextBody         = cdoTEXT

                  ON ERROR RESUME NEXT
                     IF objCDOSYSmail.SEND = "" THEN 
                        Response.Write "Mensagem enviada com sucesso!"
                     ELSE
                        IF NOT ERR.NUMBER = "0" THEN
                              Response.Write "Não foi possível enviar a mensagem!"
                              Response.Write "OCORREU UM ERRO: " & Err.Number & " | " & Err.Description
                           Err.Clear()
                        END IF
                     END IF
                  ON ERROR GOTO 0

            SET objCDOSYSmail = Nothing 
            SET objCDOSYScon  = Nothing

         ELSE
            Response.Write "recaptcha errado!"
         END IF

      SET objXML = Nothing
   END IF

END IF
%>

Quem tiver tempo, e quiser dar uma olhada, só falta isso para finalizar o código, PASSAR o bendito parametro que não consigo do input para o ASP.
No demais, agradeço.
Até....
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Após 4 dias de quebra-cabeça, consegui finalizar o script....
Quem tá sofrendo, e precisar, segue exemplo completo em ASP, mas podendo ser adaptável para PHP ou qualquer outra linguagem.

HTML:
 

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

    <head>
        <meta charset="utf-8">
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
        <meta content="ie=edge" http-equiv="X-UA-Compatible">
        <title>Google Recaptcha - v3</title>

        <!-- STYLES CSS -->
        <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css">
        <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/inputmask@3.3.11/css/inputmask.min.css">
        <!-- STYLES CSS -->

        <!-- SCRIPTS JS -->
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@3.2.1/dist/jquery.min.js"></script>
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery-form@4.2.2/dist/jquery.form.min.js"></script>
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery-validation@1.19.1/dist/jquery.validate.min.js"></script>
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery-validation@1.19.1/dist/localization/messages_pt_BR.min.js"></script>
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery-validation@1.19.1/dist/additional-methods.min.js"></script>
        <!-- SCRIPTS JS -->

        <!-- SCRIPTS RECAPTCHA - SITE KEY -->
        <script src="https://www.google.com/recaptcha/api.js?render=6LesKRKk19yob6G8hx3LEoYXybIC"></script>
        <!-- SCRIPTS RECAPTCHA - SITE KEY -->

        <style type="text/css">
            *:focus {
                outline: none !important;
            }

            html,
            body {
                height: 100%;
                width: 100%;
            }

            body {
                color: darkgrey;
                margin: 60px 0px;
                -webkit-font-smoothing: antialiased;
                -moz-osx-font-smoothing: grayscale;
            }

            /* google captcha - hidden na tela */
            .grecaptcha-badge {
                /* display: none !important; */
                visibility: hidden !important;
            }

            /* google captcha - exibe somente na página contato */
            #frm-contato .grecaptcha-badge {
                visibility: visible !important;
            }

            .grecaptcha-badge {
                width: 0 !important;
            }

            .grecaptcha-badge.show {
                width: 256px !important;
            }

            .grecaptcha-badge {
                display: flex;
                justify-content: flex-end;
                overflow: hidden;
                width: 70px;
                height: 60px;
                margin: 0 auto;
                box-shadow: 0 0 4px #ddd;
                transition: linear 100ms width;
            }

            .grecaptcha-badge:hover {
                width: 256px;
            }

            .grecaptcha-badge-small {
                font-size: 9px;
                color: darkgray;
                text-align: center;
            }

            .valid-class {
                color: #006400;
                padding-left: 12px;
                padding-top: 3px;
                font-size: 15px;
                display: block;
            }

            .error-class {
                color: #e33d00;
                padding-left: 12px;
                padding-top: 3px;
                font-size: 15px;
                display: block;
            }

            .loading {
                position: fixed;
                left: 0px;
                top: 0px;
                margin: 0px;
                width: 100%;
                height: 100%;
                display: block;
                z-index: 999999;
                opacity: 0.92;
                -moz-opacity: 0.92;
                filter: alpha(opacity=98);
                background-color: #00224b;
                background-image: url("img/loading.gif");
                background-repeat: no-repeat;
                background-position: 50% 50%;
                text-align: center;
                overflow: hidden;
                font-weight: bold;
                font-size: 25px;
                color: white;
                padding-top: 25%;
            }

        </style>
    </head>

    <body>


        <!-- code | formulario -->
        <section id="frm-contato" class="container-fluid">
            <h1 class="text-center">RECAPTCHA</h1>
            <h4 class="text-center">GOOGLE v3</h4>
            <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-xs-12">
                <form id="form_contato" method="post" action="inc/recaptcha.asp">
                    <div class="form-group">
                        <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-xs-12 mb-2">
                            <label class="control-label" for="campo_nome">Nome</label>
                            <input type="text" id="campo_nome" name="campo_nome" class="form-control" autocomplete="name" placeholder="Digite seu nome">
                        </div>
                        <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-xs-12 mb-2">
                            <label class="control-label" for="campo_email">Email</label>
                            <input type="text" id="campo_email" name="campo_email" class="form-control" autocomplete="email" placeholder="Digite seu e-mail">
                        </div>
                        <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-xs-12 mb-2">
                            <label class="control-label" for="campo_mensagem">Mensagem</label>
                            <textarea type="text" id="campo_mensagem" name="campo_mensagem" class="form-control" placeholder="Descreva sua mensagem"></textarea>
                        </div>
                        <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 mt-4">
                            <div id="contato_retorno"></div>
                            <button id="btn-form" type="submit" class="btn btn-block btn-md btn-success">ENVIAR</button>
                        </div>
                    </div>

                    <input type="hidden" id="g-recaptcha-response">
                    <input type="hidden" id="action" value="validate_captcha">

                    <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 grecaptcha-badge-small p-4">
                        Este site é protegido pelo reCAPTCHA e pelo Google
                        <a href="https://policies.google.com/privacy">Política de Privacidade</a> e
                        <a href="https://policies.google.com/terms">Termos do serviço</a>.
                    </div>

                </form>
            </div>
            <div id="contato_carregando"></div>
        </section>
        <!-- code | formulario -->



        <!-- GOOGLE reCAPTCHA -->
        <script type="text/javascript">
            "use strict";

            //formulario de validacao
            $("#form_contato").validate({
                errorClass: "error-class",
                validClass: "valid-class",

                onkeyup: function (element) {
                    this.element(element);
                },
                onfocusout: function (element) {
                    this.element(element);
                },

                rules: {
                    campo_nome: {
                        required: true,
                        minlength: 5,
                        maxlength: 50
                    },
                    campo_email: {
                        required: true,
                        minlength: 5,
                        email: true
                    },
                    campo_mensagem: {
                        required: true,
                        minlength: 5,
                        maxlength: 5000
                    }
                },

                submitHandler: function (form) {

                    // A) resgatar variaveis (SerializeArray)
                    // var formData = $("#frm_form_contato").serialize();
                    // var formData = $("#frm_form_contato").serializeArray();

                    // B) resgatar variaveis (FormData)
                    // var formData = {
                    // 'campo_nome': $("#campo_nome").val(),
                    // 'campo_email': $("#campo_email").val(),
                    // 'campo_mensagem': $("#campo_mensagem").val(),
                    // 'campo_token': $("#g-recaptcha-response").val(),
                    // };


                    //CAPTCHA + FORM POR POST
                    // grecaptcha.ready(function () {
                    //     grecaptcha.execute('6LeWQKRKk19yob6G8hx3LEoYXybIC', {
                    //         action: 'validate_captcha'
                    //     }).then(function (token) {
                    //         document.getElementById('g-recaptcha-response').value = token;

                    //         $.post($("#form_contato").attr("action"), {
                    //             campo_nome: $("#campo_nome").val(),
                    //             campo_email: $("#campo_email").val(),
                    //             campo_mensagem: $("#campo_mensagem").val(),
                    //             campo_token: $("#g-recaptcha-response").val(),
                    //         }).then(function (response) {
                    //             if (response = "success") {
                    //                 console.log('captcha ok');
                    //                 alert(token);
                    //             } else {
                    //                 console.log('recaptcha inválido! você é um ROBO ou SPAMMER!!!');
                    //             }
                    //         });

                    //     });
                    // });



                    var nome = $("#campo_nome").val();
                    var email = $("#campo_email").val();
                    var mensagem = $("#campo_mensagem").val();
                    var token = $("#g-recaptcha-response").val();


                    //CAPTCHA + FORM POR AJAX
                    grecaptcha.ready(function () {
                        grecaptcha.execute('6LesKk19yob6G8hx3LEoYXybIC', {
                            action: 'validate_captcha'
                        }).then(function (token) {
                            document.getElementById('g-recaptcha-response').value = token;

                            $.ajax({
                                url: $("#form_contato").attr("action"),
                                type: "get",
                                // contentType: 'application/json; utf-8',
                                // dataType: 'json',
                                // data: "nome=" + nome + "&email=" + email + "&msg=" + mensagem + "&token=" + token + "",
                                data: {
                                    nome: nome,
                                    email: email,
                                    mensagem: mensagem,
                                    token: token,
                                },

                                // antes de tudo
                                beforeSend: function () {
                                    $("#btn-form").removeClass('btn-success').addClass('btn-warning').text('Aguarde, enviando ...').fadeIn();
                                    $("#contato_carregando").html("<div class='loading'></div>").fadeIn();
                                },

                                // se houver sucesso
                                success: function (response) {
                                    $("#contato_carregando").delay(100).fadeOut();
                                    $("#contato_retorno").html("<div class='valida_a_certo'>" + response + "</div>").delay(2000).fadeIn();
                                    $("#contato_retorno").fadeOut();
                                    $("#btn-form").removeClass('btn-warning').addClass('btn-success').text('Mensagem Enviada!');
                                    $(form)[0].reset();
                                },

                                // se houver erro
                                error: function (response) {
                                    $("#contato_retorno").html("<div class='valida_a_erro'>" + response + "</div>").delay(2000).fadeIn();
                                    $("#contato_retorno").fadeOut();
                                    $(form)[0].reset();
                                },

                                // depois de tudo,
                                complete: function (response) {
                                    $("body").fadeTo(4000, '1');
                                },

                            });

                            return false;
                        });
                    });

                }
            });

        </script>



        <!-- SCRIPTS RODAPE -->
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/js/bootstrap.min.js"></script>
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/inputmask@3.3.11/dist/jquery.inputmask.bundle.js"></script>
        <!-- SCRIPTS RODAPE -->

    </body>

</html>


ASP:
 

<!--#include file="objetojson.asp"-->

<%
   Response.LCID = 1033 'USA LCID
IF Request.ServerVariables("SERVER_NAME") <> Request.ServerVariables("SERVER_NAME") THEN
   Response.Write "ACESSO RESTRITO!"
ELSE

      G_TOKEN      = Request("token")                                            'google token
      G_KEY_URL    = "https://www.google.com/recaptcha/api/siteverify?secret="   'google url
      G_KEY_SITE   = "suachave"                  'google chave do site
      G_KEY_SECRET = "chavesecreta"                  'google chave secreta

      ' response.write request("nome") & "<br>"
      ' response.write request("email") & "<br>"
      ' response.write request("mensagem") & "<br><br>"
      ' response.write request("token") & "<br><br>"

   IF Request.ServerVariables("REQUEST_METHOD") = "POST" OR Request.ServerVariables("REQUEST_METHOD") = "GET" THEN
      SET objXML = Server.CreateObject("MSXML2.ServerXMLHTTP")
          objXML.Open "GET", ""&G_KEY_URL&G_KEY_SECRET&"&response="&G_TOKEN&"", false
          objXML.Send
      
          SET objXMLjson    = new jsonClass
          SET objXMLjsonOut = objXMLjson.parse(objXML.responseText) 

               IF objXMLjson.value("success") THEN
                  recaptcha = "true"
               ELSE
                  recaptcha = "false"
               END IF

            ' response.write recaptcha & "<br>"
            ' response.write objXML.responseText & "<br>"

         IF recaptcha = "true" THEN
         
                campo_nome      = Request.Form("nome")
                campo_email     = Request.Form("email")
                campo_mensagem  = Replace(Request.Form("mensagem"), Chr(13), "<br>") 

                     cdoSERVER  = "mail.teste.com.br"
                     cdoORIGEM  = "teste@teste.com.br"
                     cdoPASS    = "teste%#@"
                     cdoPORT    = 587
                     cdoTIMEOUT = 120
                     cdoUSING   = 2
                     cdoAUT     = 1
                     cdoSSL     = 0

                     cdoDE      =  campo_nome &" <"& campo_email &">"
                     cdoPARA    = "teste@teste.com.br"
                     cdoASSUNTO = "teste - Contato"
                     cdoTEXT    = "Envio de mensagem usando CDOSYS"

              SET objCDOSYSmail = Server.CreateObject("cdo.message")
              SET objCDOSYScon  = Server.CreateObject("cdo.configuration")

                  objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport")          = cdoPORT
                  objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing")               = cdoUSING
                  objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate")        = cdoAUT
                  objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout")   = cdoTIMEOUT
                  objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl")              = cdoSSL
                  objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver")              = cdoSERVER
                  objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername")            = cdoORIGEM
                  objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword")            = cdoPASS
                  objCDOSYScon.Fields.Update

              SET objCDOSYSmail.Configuration    = objCDOSYScon
                  objCDOSYSmail.From             = cdoORIGEM
                  objCDOSYSmail.To               = cdoPARA
                  objCDOSYSmail.Subject          = cdoASSUNTO
                  objCDOSYSmail.TextBody         = cdoTEXT

                     ON ERROR RESUME NEXT
                        IF NOT objCDOSYSmail.Send = "" THEN 
                           Response.Write "Mensagem enviada com sucesso!"
                        ELSE
                           IF NOT ERR.NUMBER = "0" THEN
                                 Response.Write "Não foi possível enviar a mensagem!"
                                 Response.Write "OCORREU UM ERRO: " & Err.Number & " | " & Err.Description
                              ERR.Clear()
                           END IF
                        END IF
                     ON ERROR GOTO 0

              SET objCDOSYSmail = Nothing 
              SET objCDOSYScon  = Nothing

         ELSE
            Response.Write "<b>Google Captcha - Erro!<b>"
         END IF

      SET objXML = Nothing
   END IF

END IF
%>

uma contribuição...
serve de exemplo e implementação...
correções, melhorias, fico satisfeito....

abraços....

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 30/04/2020 at 18:36, marcelocardoso disse:

Após 4 dias de quebra-cabeça, consegui finalizar o script....
Quem tá sofrendo, e precisar, segue exemplo completo em ASP, mas podendo ser adaptável para PHP ou qualquer outra linguagem.

HTML:
 


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

    <head>
        <meta charset="utf-8">
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
        <meta content="ie=edge" http-equiv="X-UA-Compatible">
        <title>Google Recaptcha - v3</title>

        <!-- STYLES CSS -->
        <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/css/bootstrap.min.css">
        <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/inputmask@3.3.11/css/inputmask.min.css">
        <!-- STYLES CSS -->

        <!-- SCRIPTS JS -->
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery@3.2.1/dist/jquery.min.js"></script>
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery-form@4.2.2/dist/jquery.form.min.js"></script>
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery-validation@1.19.1/dist/jquery.validate.min.js"></script>
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery-validation@1.19.1/dist/localization/messages_pt_BR.min.js"></script>
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery-validation@1.19.1/dist/additional-methods.min.js"></script>
        <!-- SCRIPTS JS -->

        <!-- SCRIPTS RECAPTCHA - SITE KEY -->
        <script src="https://www.google.com/recaptcha/api.js?render=6LesKRKk19yob6G8hx3LEoYXybIC"></script>
        <!-- SCRIPTS RECAPTCHA - SITE KEY -->

        <style type="text/css">
            *:focus {
                outline: none !important;
            }

            html,
            body {
                height: 100%;
                width: 100%;
            }

            body {
                color: darkgrey;
                margin: 60px 0px;
                -webkit-font-smoothing: antialiased;
                -moz-osx-font-smoothing: grayscale;
            }

            /* google captcha - hidden na tela */
            .grecaptcha-badge {
                /* display: none !important; */
                visibility: hidden !important;
            }

            /* google captcha - exibe somente na página contato */
            #frm-contato .grecaptcha-badge {
                visibility: visible !important;
            }

            .grecaptcha-badge {
                width: 0 !important;
            }

            .grecaptcha-badge.show {
                width: 256px !important;
            }

            .grecaptcha-badge {
                display: flex;
                justify-content: flex-end;
                overflow: hidden;
                width: 70px;
                height: 60px;
                margin: 0 auto;
                box-shadow: 0 0 4px #ddd;
                transition: linear 100ms width;
            }

            .grecaptcha-badge:hover {
                width: 256px;
            }

            .grecaptcha-badge-small {
                font-size: 9px;
                color: darkgray;
                text-align: center;
            }

            .valid-class {
                color: #006400;
                padding-left: 12px;
                padding-top: 3px;
                font-size: 15px;
                display: block;
            }

            .error-class {
                color: #e33d00;
                padding-left: 12px;
                padding-top: 3px;
                font-size: 15px;
                display: block;
            }

            .loading {
                position: fixed;
                left: 0px;
                top: 0px;
                margin: 0px;
                width: 100%;
                height: 100%;
                display: block;
                z-index: 999999;
                opacity: 0.92;
                -moz-opacity: 0.92;
                filter: alpha(opacity=98);
                background-color: #00224b;
                background-image: url("img/loading.gif");
                background-repeat: no-repeat;
                background-position: 50% 50%;
                text-align: center;
                overflow: hidden;
                font-weight: bold;
                font-size: 25px;
                color: white;
                padding-top: 25%;
            }

        </style>
    </head>

    <body>


        <!-- code | formulario -->
        <section id="frm-contato" class="container-fluid">
            <h1 class="text-center">RECAPTCHA</h1>
            <h4 class="text-center">GOOGLE v3</h4>
            <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-xs-12">
                <form id="form_contato" method="post" action="inc/recaptcha.asp">
                    <div class="form-group">
                        <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-xs-12 mb-2">
                            <label class="control-label" for="campo_nome">Nome</label>
                            <input type="text" id="campo_nome" name="campo_nome" class="form-control" autocomplete="name" placeholder="Digite seu nome">
                        </div>
                        <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-xs-12 mb-2">
                            <label class="control-label" for="campo_email">Email</label>
                            <input type="text" id="campo_email" name="campo_email" class="form-control" autocomplete="email" placeholder="Digite seu e-mail">
                        </div>
                        <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-xs-12 mb-2">
                            <label class="control-label" for="campo_mensagem">Mensagem</label>
                            <textarea type="text" id="campo_mensagem" name="campo_mensagem" class="form-control" placeholder="Descreva sua mensagem"></textarea>
                        </div>
                        <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 mt-4">
                            <div id="contato_retorno"></div>
                            <button id="btn-form" type="submit" class="btn btn-block btn-md btn-success">ENVIAR</button>
                        </div>
                    </div>

                    <input type="hidden" id="g-recaptcha-response">
                    <input type="hidden" id="action" value="validate_captcha">

                    <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 grecaptcha-badge-small p-4">
                        Este site é protegido pelo reCAPTCHA e pelo Google
                        <a href="https://policies.google.com/privacy">Política de Privacidade</a> e
                        <a href="https://policies.google.com/terms">Termos do serviço</a>.
                    </div>

                </form>
            </div>
            <div id="contato_carregando"></div>
        </section>
        <!-- code | formulario -->



        <!-- GOOGLE reCAPTCHA -->
        <script type="text/javascript">
            "use strict";

            //formulario de validacao
            $("#form_contato").validate({
                errorClass: "error-class",
                validClass: "valid-class",

                onkeyup: function (element) {
                    this.element(element);
                },
                onfocusout: function (element) {
                    this.element(element);
                },

                rules: {
                    campo_nome: {
                        required: true,
                        minlength: 5,
                        maxlength: 50
                    },
                    campo_email: {
                        required: true,
                        minlength: 5,
                        email: true
                    },
                    campo_mensagem: {
                        required: true,
                        minlength: 5,
                        maxlength: 5000
                    }
                },

                submitHandler: function (form) {

                    // A) resgatar variaveis (SerializeArray)
                    // var formData = $("#frm_form_contato").serialize();
                    // var formData = $("#frm_form_contato").serializeArray();

                    // B) resgatar variaveis (FormData)
                    // var formData = {
                    // 'campo_nome': $("#campo_nome").val(),
                    // 'campo_email': $("#campo_email").val(),
                    // 'campo_mensagem': $("#campo_mensagem").val(),
                    // 'campo_token': $("#g-recaptcha-response").val(),
                    // };


                    //CAPTCHA + FORM POR POST
                    // grecaptcha.ready(function () {
                    //     grecaptcha.execute('6LeWQKRKk19yob6G8hx3LEoYXybIC', {
                    //         action: 'validate_captcha'
                    //     }).then(function (token) {
                    //         document.getElementById('g-recaptcha-response').value = token;

                    //         $.post($("#form_contato").attr("action"), {
                    //             campo_nome: $("#campo_nome").val(),
                    //             campo_email: $("#campo_email").val(),
                    //             campo_mensagem: $("#campo_mensagem").val(),
                    //             campo_token: $("#g-recaptcha-response").val(),
                    //         }).then(function (response) {
                    //             if (response = "success") {
                    //                 console.log('captcha ok');
                    //                 alert(token);
                    //             } else {
                    //                 console.log('recaptcha inválido! você é um ROBO ou SPAMMER!!!');
                    //             }
                    //         });

                    //     });
                    // });



                    var nome = $("#campo_nome").val();
                    var email = $("#campo_email").val();
                    var mensagem = $("#campo_mensagem").val();
                    var token = $("#g-recaptcha-response").val();


                    //CAPTCHA + FORM POR AJAX
                    grecaptcha.ready(function () {
                        grecaptcha.execute('6LesKk19yob6G8hx3LEoYXybIC', {
                            action: 'validate_captcha'
                        }).then(function (token) {
                            document.getElementById('g-recaptcha-response').value = token;

                            $.ajax({
                                url: $("#form_contato").attr("action"),
                                type: "get",
                                // contentType: 'application/json; utf-8',
                                // dataType: 'json',
                                // data: "nome=" + nome + "&email=" + email + "&msg=" + mensagem + "&token=" + token + "",
                                data: {
                                    nome: nome,
                                    email: email,
                                    mensagem: mensagem,
                                    token: token,
                                },

                                // antes de tudo
                                beforeSend: function () {
                                    $("#btn-form").removeClass('btn-success').addClass('btn-warning').text('Aguarde, enviando ...').fadeIn();
                                    $("#contato_carregando").html("<div class='loading'></div>").fadeIn();
                                },

                                // se houver sucesso
                                success: function (response) {
                                    $("#contato_carregando").delay(100).fadeOut();
                                    $("#contato_retorno").html("<div class='valida_a_certo'>" + response + "</div>").delay(2000).fadeIn();
                                    $("#contato_retorno").fadeOut();
                                    $("#btn-form").removeClass('btn-warning').addClass('btn-success').text('Mensagem Enviada!');
                                    $(form)[0].reset();
                                },

                                // se houver erro
                                error: function (response) {
                                    $("#contato_retorno").html("<div class='valida_a_erro'>" + response + "</div>").delay(2000).fadeIn();
                                    $("#contato_retorno").fadeOut();
                                    $(form)[0].reset();
                                },

                                // depois de tudo,
                                complete: function (response) {
                                    $("body").fadeTo(4000, '1');
                                },

                            });

                            return false;
                        });
                    });

                }
            });

        </script>



        <!-- SCRIPTS RODAPE -->
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/bootstrap@4.3.1/dist/js/bootstrap.min.js"></script>
        <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/inputmask@3.3.11/dist/jquery.inputmask.bundle.js"></script>
        <!-- SCRIPTS RODAPE -->

    </body>

</html>


ASP:
 


<!--#include file="objetojson.asp"-->

<%
   Response.LCID = 1033 'USA LCID
IF Request.ServerVariables("SERVER_NAME") <> Request.ServerVariables("SERVER_NAME") THEN
   Response.Write "ACESSO RESTRITO!"
ELSE

      G_TOKEN      = Request("token")                                            'google token
      G_KEY_URL    = "https://www.google.com/recaptcha/api/siteverify?secret="   'google url
      G_KEY_SITE   = "suachave"                  'google chave do site
      G_KEY_SECRET = "chavesecreta"                  'google chave secreta

      ' response.write request("nome") & "<br>"
      ' response.write request("email") & "<br>"
      ' response.write request("mensagem") & "<br><br>"
      ' response.write request("token") & "<br><br>"

   IF Request.ServerVariables("REQUEST_METHOD") = "POST" OR Request.ServerVariables("REQUEST_METHOD") = "GET" THEN
      SET objXML = Server.CreateObject("MSXML2.ServerXMLHTTP")
          objXML.Open "GET", ""&G_KEY_URL&G_KEY_SECRET&"&response="&G_TOKEN&"", false
          objXML.Send
      
          SET objXMLjson    = new jsonClass
          SET objXMLjsonOut = objXMLjson.parse(objXML.responseText) 

               IF objXMLjson.value("success") THEN
                  recaptcha = "true"
               ELSE
                  recaptcha = "false"
               END IF

            ' response.write recaptcha & "<br>"
            ' response.write objXML.responseText & "<br>"

         IF recaptcha = "true" THEN
         
                campo_nome      = Request.Form("nome")
                campo_email     = Request.Form("email")
                campo_mensagem  = Replace(Request.Form("mensagem"), Chr(13), "<br>") 

                     cdoSERVER  = "mail.teste.com.br"
                     cdoORIGEM  = "teste@teste.com.br"
                     cdoPASS    = "teste%#@"
                     cdoPORT    = 587
                     cdoTIMEOUT = 120
                     cdoUSING   = 2
                     cdoAUT     = 1
                     cdoSSL     = 0

                     cdoDE      =  campo_nome &" <"& campo_email &">"
                     cdoPARA    = "teste@teste.com.br"
                     cdoASSUNTO = "teste - Contato"
                     cdoTEXT    = "Envio de mensagem usando CDOSYS"

              SET objCDOSYSmail = Server.CreateObject("cdo.message")
              SET objCDOSYScon  = Server.CreateObject("cdo.configuration")

                  objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport")          = cdoPORT
                  objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing")               = cdoUSING
                  objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate")        = cdoAUT
                  objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout")   = cdoTIMEOUT
                  objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl")              = cdoSSL
                  objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver")              = cdoSERVER
                  objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername")            = cdoORIGEM
                  objCDOSYScon.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword")            = cdoPASS
                  objCDOSYScon.Fields.Update

              SET objCDOSYSmail.Configuration    = objCDOSYScon
                  objCDOSYSmail.From             = cdoORIGEM
                  objCDOSYSmail.To               = cdoPARA
                  objCDOSYSmail.Subject          = cdoASSUNTO
                  objCDOSYSmail.TextBody         = cdoTEXT

                     ON ERROR RESUME NEXT
                        IF NOT objCDOSYSmail.Send = "" THEN 
                           Response.Write "Mensagem enviada com sucesso!"
                        ELSE
                           IF NOT ERR.NUMBER = "0" THEN
                                 Response.Write "Não foi possível enviar a mensagem!"
                                 Response.Write "OCORREU UM ERRO: " & Err.Number & " | " & Err.Description
                              ERR.Clear()
                           END IF
                        END IF
                     ON ERROR GOTO 0

              SET objCDOSYSmail = Nothing 
              SET objCDOSYScon  = Nothing

         ELSE
            Response.Write "<b>Google Captcha - Erro!<b>"
         END IF

      SET objXML = Nothing
   END IF

END IF
%>

uma contribuição...
serve de exemplo e implementação...
correções, melhorias, fico satisfeito....

abraços....

 

 

Existe algum requisito? alguma lib (css, javascript) ou algo do gênero?

Compartilhar este post


Link para o post
Compartilhar em outros sites

não utilizei no wordpress, mas acredito que consiga sim....
o código acima, é feito em ASP, para backend e html puro para qualquer linguagem além de javascript, então, não utilizo wordpress, mas com certeza, consegue ....

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Jack Oliveira
      Ola estou fazendo um instalador de banco de dados 
       
      em parte funciona  
       
      Mas quando uso o
      <<<HTML
       
      HTML;
       
      Ele fica com estas informações no top
       
      7.4 ao 8.38.0.28512MOnOnOnOffOffOnOffOffOnOnOnOnOnprogress-bar-success
       
      <?php $MeuHtml = <<<HTML <!DOCTYPE html> <html> <head><meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>Instalação {$autor}</title> <link rel="icon" href="{$urlApi}api/allinstall/assets/icone.png?v={$versao}" sizes="32x32"> <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport"> <link rel="stylesheet" href="{$urlApi}api/allinstall/assets/css/app.css?v={$versao}"> <style type="text/css"> .license { background-color: #FFF; height: 400px; width: 100%; margin: 10px; } .form-control{ margin-bottom: 5px; } #primary{background: #FF6403} .paper-card{background: #272c33} .card{background: none;} .sw-theme-circles>ul.step-anchor:before{background-color: #30363d} .sw-theme-circles>ul.step-anchor>li>a{border: 3px solid #30363d} .sw-theme-circles>ul.step-anchor>li>a{background: #f5f5f5; min-width: 50px; height: 50px; text-align: center; -webkit-box-shadow: inset 0 0 0 3px #fff!important; box-shadow: inset 0 0 0 3px #fff!important; text-decoration: none; outline-style: none; z-index: 99; color: #999; background: #fff; line-height: 2; font-weight: bold;} .sw-theme-circles>ul.step-anchor>li{margin-left: 15%;} .card-header{border-bottom: 0} .table-striped tbody tr:nth-of-type(odd){background-color: #30363d;} .table-bordered{border: 1px solid #30363d;} .table-bordered td, .table-bordered th { border: 1px solid #30363d; } </style> </head> <body class="light loaded"> <div id="app"> <main> <div id="primary" class="p-t-b-100 height-full"> <div class="container"> <div class="row"> <div class="col-lg-8 mx-md-auto paper-card"> <div class="text-center"> <img class="img-responsive" src="{$urlApi}api/allinstall/assets/{$imagem}?v={$versao}"> <p><strong><H3>Instalação {$projeto} | V: {$versao}</H3></strong></p> </div> HTML; if (!isset($_GET['step']) || $_GET['step'] == '1') { $MeuHtml .= <<<HTML <div class="card no-b"> <div class="card-header pb-0"> <div class="stepper sw-main sw-theme-circles" id="smartwizard" data-options='{ "theme":"sw-theme-circles", "transitionEffect":"fade" }'> <ul class="nav step-anchor"> <li><a href="#step-1y">1</a></li> <li><a href="#step-2y">2</a></li> <li><a href="#step-3y">3</a></li> <li><a href="#step-4y">4</a></li> </ul> </div> </div> <div class="card-body"> <h6><b>Configurações do Servidor</b></h6><br> <table class="table table-condensed table-bordered table-striped"> <tr> <th>Função / Extensão</th> <th>Config. Necessária</th> <th>Config. Atual</th> <th width="50px">Status</th> </tr> <tr> <td>Versão do PHP</td> <td> HTML; echo $php7. ' ao '.$php8; $MeuHtml .= <<<HTML </td> <td> HTML; echo phpversion(); $MeuHtml .= <<<HTML </td> <td> HTML; if(phpversion() >= $php7 && phpversion() <= $php8) { $i = $i + 1; echo '<button type="button" class="btn btn-success"><i class="icon-check"></i></button>'; } else { echo '<button type="button" class="btn btn-danger"><i class="icon-close"></i></button>'; } $MeuHtml .= <<<HTML </td> </tr> HTML; $MeuHtml .= <<<HTML <tr> <td>Memória do PHP</td> <td>128MB</td> <td> HTML; echo $mem = ini_get('memory_limit'); $MeuHtml .= <<<HTML </td> <td> HTML; if($mem >= 128) { $i = $i + 1; echo '<button type="button" class="btn btn-success"><i class="icon-check"></i></button>'; } else { echo '<button type="button" class="btn btn-danger"><i class="icon-close"></i></button>'; } $MeuHtml .= <<<HTML </td> </tr> <tr> <td>cURL</td> <td>On</td> <td> HTML; if(function_exists('curl_init')) { echo 'On'; } else { echo 'Off'; } $MeuHtml .= <<<HTML </td> <td> HTML; if(function_exists('curl_init')) { $i = $i + 1; echo '<button type="button" class="btn btn-success"><i class="icon-check"></i></button>'; } else { echo '<button type="button" class="btn btn-danger"><i class="icon-close"></i></button>'; } $MeuHtml .= <<<HTML </td> </tr> <tr> <td>Allow URL fopen</td> <td>On</td> <td> HTML; if(ini_get('allow_url_fopen')) { echo 'On'; } else { echo 'Off'; } $MeuHtml .= <<<HTML </td> <td> HTML; if(ini_get('allow_url_fopen')) { $i = $i + 1; echo '<button type="button" class="btn btn-success"><i class="icon-check"></i></button>'; } else { echo '<button type="button" class="btn btn-danger"><i class="icon-close"></i></button>'; } $MeuHtml .= <<<HTML </td> </tr> <tr> <td>File Get Contents</td> <td>On</td> <td> HTML; if(function_exists('file_get_contents')) { echo 'On'; } else { echo 'Off'; } $MeuHtml .= <<<HTML </td> <td> HTML; if(function_exists('file_get_contents')) { $i = $i + 1; echo '<button type="button" class="btn btn-success"><i class="icon-check"></i></button>'; } else { echo '<button type="button" class="btn btn-danger"><i class="icon-close"></i></button>'; } $MeuHtml .= <<<HTML </td> </tr> <tr> <td>Sessão Auto Start</td> <td>Off</td> <td> HTML; if(ini_get('session_auto_start')) { echo 'On'; } else { echo 'Off'; } $MeuHtml .= <<<HTML </td> <td> HTML; if(!ini_get('session_auto_start')) { $i = $i + 1; echo '<button type="button" class="btn btn-success"><i class="icon-check"></i></button>'; } else { echo '<button type="button" class="btn btn-danger"><i class="icon-close"></i></button>'; } $MeuHtml .= <<<HTML </td> </tr> <tr> <td>Safe Mode</td> <td>Off</td> <td> HTML; if(ini_get('safe_mode')) { echo 'On'; } else { echo 'Off'; } $MeuHtml .= <<<HTML </td> <td> HTML; if(!ini_get('safe_mode')) { $i = $i + 1; echo '<button type="button" class="btn btn-success"><i class="icon-check"></i></button>'; } else { echo '<button type="button" class="btn btn-danger"><i class="icon-close"></i></button>'; } $MeuHtml .= <<<HTML </td> </tr> <tr> <td>Short Open Tags</td> <td>On</td> <td> HTML; if(ini_get('short_open_tag')) { echo 'On'; } else { echo 'Off'; } $MeuHtml .= <<<HTML </td> <td> HTML; if(ini_get('short_open_tag')) { $i = $i + 1; echo '<button type="button" class="btn btn-success"><i class="icon-check"></i></button>'; } else { echo '<button type="button" class="btn btn-danger"><i class="icon-close"></i></button>'; } $MeuHtml .= <<<HTML </td> </tr> <tr> <td>Magic Quotes GPC</td> <td>Off</td> <td> HTML; if(ini_get('magic_quotes_gpc')) { echo 'On'; } else { echo 'Off'; } $MeuHtml .= <<<HTML </td> <td> HTML; if(!ini_get('magic_quotes_gpc')) { $i = $i + 1; echo '<button type="button" class="btn btn-success"><i class="icon-check"></i></button>'; } else { echo '<button type="button" class="btn btn-danger"><i class="icon-close"></i></button>'; } $MeuHtml .= <<<HTML </td> </tr> <tr> <td>Register Globals</td> <td>Off</td> <td> HTML; if(ini_get('register_globals')) { echo 'On'; } else { echo 'Off'; } $MeuHtml .= <<<HTML </td> <td> HTML; if(!ini_get('register_globals')) { $i = $i + 1; echo '<button type="button" class="btn btn-success"><i class="icon-check"></i></button>'; } else { echo '<button type="button" class="btn btn-danger"><i class="icon-close"></i></button>'; } $MeuHtml .= <<<HTML </td> </tr> <tr> <td>PHPMail</td> <td>On</td> <td> HTML; if(function_exists('mail')) { echo 'On'; } else { echo 'Off'; } $MeuHtml .= <<<HTML </td> <td> HTML; if(function_exists('mail')) { $i = $i + 1; echo '<button type="button" class="btn btn-success"><i class="icon-check"></i></button>'; } else { $i = $i + 1; echo '<button type="button" class="btn btn-danger"><i class="icon-close"></i></button>'; } $MeuHtml .= <<<HTML </td> </tr> <tr> <td>MySQLi</td> <td>On</td> <td> HTML; if(extension_loaded('mysqli')) { echo 'On'; } else { echo 'Off'; } $MeuHtml .= <<<HTML </td> <td> HTML; if(extension_loaded('mysqli')) { $i = $i + 1; echo '<button type="button" class="btn btn-success"><i class="icon-check"></i></button>'; } else { echo '<button type="button" class="btn btn-danger"><i class="icon-close"></i></button>'; } $MeuHtml .= <<<HTML </td> </tr> <tr> <td>ZIP</td> <td>On</td> <td> HTML; if(extension_loaded('zip')) { echo 'On'; } else { echo 'Off'; } $MeuHtml .= <<<HTML </td> <td> HTML; if(extension_loaded('zip')) { $i = $i + 1; echo '<button type="button" class="btn btn-success"><i class="icon-check"></i></button>'; } else { echo '<button type="button" class="btn btn-danger"><i class="icon-close"></i></button>'; } $MeuHtml .= <<<HTML </td> </tr> <tr> <td>MBString</td> <td>On</td> <td> HTML; if(extension_loaded('mbstring')) { echo 'On'; } else { echo 'Off'; } $MeuHtml .= <<<HTML </td> <td> HTML; if(extension_loaded('mbstring')) { $i = $i + 1; echo '<button type="button" class="btn btn-success"><i class="icon-check"></i></button>'; } else { echo '<button type="button" class="btn btn-danger"><i class="icon-close"></i></button>'; } $MeuHtml .= <<<HTML </td> </tr> <tr> <td>XML</td> <td>On</td> <td> HTML; if(extension_loaded('libxml')) { echo 'On'; } else { echo 'Off'; } $MeuHtml .= <<<HTML </td> <td> HTML; if(extension_loaded('libxml')) { $i = $i + 1; echo '<button type="button" class="btn btn-success"><i class="icon-check"></i></button>'; } else { echo '<button type="button" class="btn btn-danger"><i class="icon-close"></i></button>'; } $MeuHtml .= <<<HTML </td> </tr> </table> <hr> <h6><b>Diretórios e Permissões de Arquivos</b></h6><br> <table class="table table-condensed table-bordered table-striped"> <tr> <th>Diretório</th> <th style="width: 40px">Status</th> </tr> <tr> <td>database</td> <td> HTML; if(is_writable('database')) { $i = $i + 1; echo '<button type="button" class="btn btn-success"><i class="icon-check"></i></button>'; } else { echo '<button type="button" class="btn btn-danger"><i class="icon-close"></i></button>'; } $MeuHtml .= <<<HTML </td> </tr> </table> <hr> <h6><b>Pontuação / Compatibilidade</b></h6><br> <div class="progress"> <div class="progress-bar progress-bar-striped progress-bar-animated HTML; echo ProgressBar(substr(VerificaPontuacao($i,'16'),0,4)); $PontPorce = VerificaPontuacao($i,'16'); $pont100 = substr(VerificaPontuacao($i,'16'),0,4); $MeuHtml .= <<<HTML " role="progressbar" aria-valuemax="100" style="width: {$PontPorce}%;"> <strong>{$pont100} / 100</strong> </div> </div> <center> <br> <button class="btn btn-primary" onclick="document.location.href='{$URL}?step=1';">Verificar</button> <button class="btn btn-primary" onclick="document.location.href='{$URL}?step=2';">Próximo</button> </center> </div> </div> HTML; } elseif (isset($_GET['step']) && $_GET['step'] == '2') { $MeuHtml .= <<<HTML <div class="card no-b"> <div class="card-header pb-0"> <div class="stepper sw-main sw-theme-circles" id="smartwizard" data-options='{ "theme":"sw-theme-circles", "transitionEffect":"fade" }'> <ul class="nav step-anchor"> <li><a href="#step-1y">1</a></li> <li class="active"><a href="#step-2y">2</a></li> <li><a href="#step-3y">3</a></li> <li><a href="#step-4y">4</a></li> </ul> </div> </div> <div class="card-body "> <iframe src="{$urlApi}api/allinstall/termos.php{$Frame}" class="license" frameborder="0" scrolling="auto"></iframe> <form action="setup.php"> <input type="hidden" name="step" value="3"> <label><input type="checkbox" required=""> Sim, eu aceito</label> <center> <br> <a href="javascript:history.back()"><button class="btn btn-primary">Voltar</button></a> <button class="btn btn-primary" type="submit">Próximo</button> </center> </form> </div> </div> HTML; } elseif (isset($_GET['step']) && $_GET['step'] == '3') { $MeuHtml .= <<<HTML <div class="card no-b"> <div class="card-header pb-0"> <div class="stepper sw-main sw-theme-circles" id="smartwizard" data-options='{ "theme":"sw-theme-circles", "transitionEffect":"fade" }'> <ul class="nav step-anchor"> <li><a href="#step-1y">1</a></li> <li class="active"><a href="#step-2y">2</a></li> <li class="active"><a href="#step-3y">3</a></li> <li><a href="#step-4y">4</a></li> </ul> </div> </div> <div class="card-body"> <form method="post" action="?InstallDB"> <h6><b>1. MySQL - Configuração do Banco de Dados</b></h6><hr> <div class="form-group row"> <label class="col-sm-3 control-label">MySQL Host:</label> <div class="col-sm-9"> <input class="form-control" name="dbhost" value="localhost" required> </div> </div> <div class="form-group row"> <label class="col-sm-3 control-label">Usuário MySQL:</label> <div class="col-sm-9"> <input class="form-control" name="dbuser" required> </div> </div> <div class="form-group row"> <label class="col-sm-3 control-label">Senha MySQL:</label> <div class="col-sm-9"> <input class="form-control" name="dbpass"> </div> </div> <div class="form-group row"> <label class="col-sm-3 control-label">Nome do Banco MySQL:</label> <div class="col-sm-9"> <input class="form-control" name="dbname" required> </div> </div> <h6><b>2. Configuração Comum</b></h6><hr> <div class="form-group row"> <label class="col-sm-3 control-label">Nome do Site:</label> <div class="col-sm-9"> <input class="form-control" name="nomesite" required> </div> </div> <div class="form-group row"> <label class="col-sm-3 control-label">URL do Site:</label> <div class="col-sm-9"> <input class="form-control" name="urlsite" value="{$urlsite}" required> </div> </div> <div class="form-group row"> <label class="col-sm-3 control-label">URL de Instalação:</label> <div class="col-sm-9"> <input class="form-control" name="siteurl" value="{$siteurl}" required> </div> </div> <div class="form-group row"> <label class="col-sm-3 control-label">Extensão:</label> <div class="col-sm-9"> <select class="form-control" name="extensao" required> <option value=""> Selecionar Extensão </option> <option value="1"> MYSQLI </option> <option value="2"> PDO </option> </select> </div> </div> <div class="form-group row"> <label class="col-sm-3 control-label">Define TimeZone:</label> <div class="col-sm-9"> <select class="form-control" name="timezone" id="timezone"> HTML; foreach ($timezones as $timezone) : echo '<option value="'.$timezone.'" '.$timezone === $current_timezone ? 'selected' : ''.'> '.$timezone.' </option>'; endforeach; $MeuHtml .= <<<HTML </select> </div> </div> <div class="form-group row"> <label class="col-sm-3 control-label">E-mail:</label> <div class="col-sm-9"> <input class="form-control" name="email" required> <em>Mesmo e-mail cadastrado em nosso Site.</em> </div> </div> <h6><b>3. Configuração do Administrador</b></h6><hr> <div class="form-group row"> <label class="col-sm-3 control-label">Nome do Usuário:</label> <div class="col-sm-9"> <input class="form-control" name="usuario" required> </div> </div> <div class="form-group row"> <label class="col-sm-3 control-label">Login:</label> <div class="col-sm-9"> <input class="form-control" name="login" required> </div> </div> <div class="form-group row"> <label class="col-sm-3 control-label">Senha:</label> <div class="col-sm-9"> <input class="form-control" type="password" name="senha" required> </div> </div> <div class="form-group row"> <label class="col-sm-3 control-label">Senha[confimação]:</label> <div class="col-sm-9"> <input class="form-control" type="password" name="senhaconfirm" required> </div> </div> <center> <a class="btn btn-primary" href="javascript:history.back()">Voltar</a> <button class="btn btn-primary">Próximo</button> </center> </form> </div> </div> HTML; } elseif (isset($_GET['step']) && $_GET['step'] == '4') { $MeuHtml .= <<<HTML <div class="card no-b"> <div class="card-header pb-0"> <div class="stepper sw-main sw-theme-circles" id="smartwizard" data-options='{ "theme":"sw-theme-circles", "transitionEffect":"fade" }'> <ul class="nav step-anchor"> <li><a href="#step-1y">1</a></li> <li class="active"><a href="#step-2y">2</a></li> <li class="active"><a href="#step-3y">3</a></li> <li class="active"><a href="#step-4y">4</a></li> </ul> </div> </div> <div class="card-body"> <div> <h4><b>Instalação realizada com sucesso!</b></h4> <p>Agora você poderá utilizar o seu {$projeto}, em caso de dúvidas entre em contato com o suporte: <b>{$emailautor}</b></p> </div> <center> <form action="{$URL}?step=4" method="post"> <button type="submit" name="realizar_login" class="btn btn-primary">Realizar Login</button> </form> </center> </div> </div> HTML; } if (isset($_POST['realizar_login'])) { // Deletar os arquivos @unlink('setup.php'); @unlink($URL); @unlink('termos.php'); @unlink('database/BD.sql'); @unlink('controller/setup.php'); // Redirecionar para a página de login ou outra página desejada header('Location: login.php?finish'); exit; } $MeuHtml .= <<<HTML <div class="box-footer"> <center> Todos os Direitos Reservados {$autor} </center> </div> </div> </div> </div> </div> </main> </div> <script src="{$urlApi}api/allinstall/assets/js/app.js"></script> </body> </html> HTML; echo $MeuHtml;  
    • Por Jack Oliveira
      Ola pessoal, boa noite a todos
       
      Bom é o seguinte tenho um codigo html onde selecione um modelo de site para poder criar na base selecionada, ele criar ate então, mas ele esta pegando somente o index.html
      Mas quero que ele salva junto ao novo projeto o css, js, img, images, assets e fonts, quando faço os ajuste para que pega tudo isso ele me da erro ao salvar 
      Vou mostra parte do html onde faz a seleção dos modelos
       
      <!-- new page modal--> <div class="modal fade" id="new-page-modal" tabindex="-1" role="dialog"> <div class="modal-dialog" role="document"> <form id="newPageForm" method="POST" action="save.php"> <div class="modal-content"> <div class="modal-header"> <h6 class="modal-title text-primary fw-normal"><i class="la la-lg la-file"></i> Nova página</h6> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"> </button> </div> <div class="modal-body text"> <div class="mb-3 row" data-key="type"> <label class="col-sm-3 col-form-label"> Modelo <abbr title="O conteúdo deste modelo será usado como ponto de partida para o novo modelo"> <i class="la la-lg la-question-circle text-primary"></i> </abbr> </label> <div class="col-sm-9 input"> <div> <select class="form-select" name="startTemplateUrl"> <option value="themes/modelo-branco/branco-template.html">Modelo em branco</option> <option value="themes/modelo1/index.html">Modelo 1 de L2</option> <option value="themes/modelo2/index.html">Modelo 3 de L2</option> <option value="themes/modelo3/index.html">Modelo 3 de L2 </option> </select> </div> </div> </div> <div class="mb-3 row" data-key="href"> <label class="col-sm-3 col-form-label">Nome da página</label> <div class="col-sm-9 input"> <div> <input name="title" type="text" value="Minha página" class="form-control" placeholder="Minha página" required> </div> </div> </div> <div class="mb-3 row" data-key="href"> <label class="col-sm-3 col-form-label">Nome do arquivo</label> <div class="col-sm-9 input"> <div> <input name="file" type="text" value="my-page.html" class="form-control" placeholder="index.html" required> </div> </div> </div> <div class="mb-3 row" data-key="href"> <label class="col-sm-3 col-form-label">Salvar na pasta</label> <div class="col-sm-9 input"> <div> <input name="folder" type="text" value="my-pages" class="form-control" placeholder="/" required> </div> </div> </div> </div> <div class="modal-footer"> <button class="btn btn-secondary btn-lg" type="reset" data-bs-dismiss="modal"><i class="la la-times"></i> Cancelar</button> <button class="btn btn-primary btn-lg" type="submit"><i class="la la-check"></i> Criar página</button> </div> </div> </form> </div> </div> A ideia aqui é salvar tudo que tiver depois do themes/demo1/
      quando ele salva so salva 
      my-pasta/index.html
      e quando for salva ele salva dentro de um pasta Projetos/MeuSite1
      Projetos/MeuSite2  e assim vai
      Este é o save.php
       
      <?php define('MAX_FILE_LIMIT', 1024 * 1024 * 2);//Tamanho máximo de arquivo HTML de 2 megabytes define('ALLOW_PHP', false);//verifique se o html salvo contém tag php e não salve se não for permitido define('ALLOWED_OEMBED_DOMAINS', [ 'https://www.youtube.com/', 'https://www.vimeo.com/', 'https://www.twitter.com/' ]);//carregar URLs apenas de sites permitidos para oembed function sanitizeFileName($file, $allowedExtension = 'html') { $basename = basename($file); $disallow = ['.htaccess', 'passwd']; if (in_array($basename, $disallow)) { showError('Nome de arquivo não permitido!'); return ''; } //sanitize, remova o ponto duplo .. e remova os parâmetros get, se houver $file = preg_replace('@\?.*$@' , '', preg_replace('@\.{2,}@' , '', preg_replace('@[^\/\\a-zA-Z0-9\-\._]@', '', $file))); if ($file) { $file = __DIR__ . DIRECTORY_SEPARATOR . $file; } else { return ''; } //permitir apenas extensão .html if ($allowedExtension) { $file = preg_replace('/\.[^.]+$/', '', $file) . ".$allowedExtension"; } return $file; } function showError($error) { header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error', true, 500); die($error); } function validOembedUrl($url) { foreach (ALLOWED_OEMBED_DOMAINS as $domain) { if (strpos($url, $domain) === 0) { return true; } } return false; } $html = ''; $file = ''; $action = ''; if (isset($_POST['startTemplateUrl']) && !empty($_POST['startTemplateUrl'])) { $startTemplateUrl = sanitizeFileName($_POST['startTemplateUrl']); $html = ''; if ($startTemplateUrl) { $html = file_get_contents($startTemplateUrl); } } else if (isset($_POST['html'])){ $html = substr($_POST['html'], 0, MAX_FILE_LIMIT); if (!ALLOW_PHP) { //if (strpos($html, '<?php') !== false) { if (preg_match('@<\?php|<\? |<\?=|<\s*script\s*language\s*=\s*"\s*php\s*"\s*>@', $html)) { showError('PHP não permitido!'); } } } if (isset($_POST['file'])) { $file = sanitizeFileName($_POST['file']); } if (isset($_GET['action'])) { $action = htmlspecialchars(strip_tags($_GET['action'])); } if ($action) { //ações do gerenciador de arquivos, excluir e renomear switch ($action) { case 'rename': $newfile = sanitizeFileName($_POST['newfile']); if ($file && $newfile) { if (rename($file, $newfile)) { echo "Arquivo '$file' renomeado para '$newfile'"; } else { showError("Erro ao renomear arquivo '$file' renomeado para '$newfile'"); } } break; case 'delete': if ($file) { if (unlink($file)) { echo "Arquivo '$file' excluído"; } else { showError("Erro ao excluir arquivo '$file'"); } } break; case 'saveReusable': //bloco ou seção $type = $_POST['type'] ?? false; $name = $_POST['name'] ?? false; $html = $_POST['html'] ?? false; if ($type && $name && $html) { $file = sanitizeFileName("$type/$name"); if ($file) { $dir = dirname($file); if (!is_dir($dir)) { echo "$dir pasta não existe\n"; if (mkdir($dir, 0777, true)) { echo "$dir pasta foi criada\n"; } else { showError("Erro ao criar pasta '$dir'\n"); } } if (file_put_contents($file, $html)) { echo "Arquivo salvo '$file'"; } else { showError("Erro ao salvar arquivo '$file'\nAs possíveis causas são falta de permissão de gravação ou caminho de arquivo incorreto!"); } } else { showError('Nome de arquivo inválido!'); } } else { showError("Faltam dados de elementos reutilizáveis!\n"); } break; case 'oembedProxy': $url = $_GET['url'] ?? ''; if (validOembedUrl($url)) { header('Content-Type: application/json'); echo file_get_contents($url); } else { showError('URL inválida!'); } break; default: showError("Ação inválida '$action'!"); } } else { //salvar pagina if ($html) { if ($file) { $dir = dirname($file); if (!is_dir($dir)) { echo "$dir pasta não existe\n"; if (mkdir($dir, 0777, true)) { echo "$dir pasta foi criada\n"; } else { showError("Erro ao criar pasta '$dir'\n"); } } if (file_put_contents($file, $html)) { echo "Arquivo salvo '$file'"; } else { showError("Erro ao salvar arquivo '$file'\nAs possíveis causas são falta de permissão de gravação ou caminho de arquivo incorreto!"); } } else { showError('O nome do arquivo está vazio!'); } } else { showError('O conteúdo HTML está vazio!'); } } Espero que possam entender o que preciso aqui....  fico no aguardo!  quando eu tento mudar a forma de salva no php, ele me da erro de que não foi salvo, e volta ao orginal como esta ai acima ele salva, talvez eu esteja escapando alguma coisa que não estou vendo.... 
    • Por Thiago Duarte
      Oi, gostaria de arrastar imagem e ao soltar formar bloco html, meu bloco de html ficaria com nome, content-1.html, content-2.html, etc
       
      Alguem pode me ajudar?
    • Por juliosonic
      Boa noite..
      Estou desenvolvendo um site de https://www.maithunatantra.com.br/ e estou com um duvida sobre o menu de navegação da versão mobile.
      O menu que tem o dropdown "Terapeutas" e "Terapias" quando clico em cima ele expande como deve ser, mas quando clico denovo para recolher os submenus
      nao acontece nada.. segue o trecho do codigo do menu..
      <div class="collapse navbar-collapse" id="navbarsExample09">             <ul class="navbar-nav ml-auto">               <li class="nav-item  active"><a class="nav-link" href="index.html">Home</a></li>               <li class="nav-item  active"><a class="nav-link" href="about-us.html">Quem Somos</a></li>               <li class="nav-item dropdown1">                     <a class="nav-link dropdown-toggle" data-toggle="dropdown1" href="#">Terapeutas</a>                     <ul class="dropdown-menu">                         <li><a class="dropdown-item" href="terapeuta-julio-cezar.html">Julio Cezar</a></li>                         <li><a class="dropdown-item" href="terapeuta-pamela-priscila.html">Pamela Priscila</a></li>                     </ul>                                    </li>               <li class="nav-item dropdown">                     <a class="nav-link dropdown-toggle" data-toggle="dropdown1" href="#">Terapias</a>                     <ul class="dropdown-menu" aria-labelledby="dropdown01">                         <li><a class="dropdown-item" href="o-que-e-reiki.html">O que é Reiki</a></li>                         <li><a class="dropdown-item" href="beneficios-reiki.html">Benefícios do Reiki</a></li>                         <li><a class="dropdown-item" href="principios-reiki.html">Princípios do Reiki</a></li>                         <li><a class="dropdown-item" href="animais-reiki.html">Reiki em Animais</a></li>                         <li><a class="dropdown-item" href="animais-reiki.html">Estudos Sobre Reiki</a></li>                         <li><a class="dropdown-item" href="terapia-massagem-tantrica.html">Terapia Tântrica</a></li>                     </ul>               </li>               <li class="nav-item  active"><a class="nav-link" href="blog.html">Blog</a></li>                <li class="nav-item"><a class="nav-link" href="contato.html">Contato</a></li>             </ul>         </div>  
      Massagem Tantrica em Curitiba
      Tantra Curitiba
      Massagem Tântrica
      Tantra
      Julio Darshan

      Obrigado
      Att
      Julio Cezar
       
       
       
    • Por joeythai
      Boa tarde pessoal,
       
      Eu criei um formulário em que tenho 3 interações: evento click, change e uma chamada ajax. No evento on change ("select#removal_table_from" )eu faço uma chamada ajax onde eu passo como parametro o id do item selecionado e construo uma tabela dinamica com o próprio javascript, após isto, tenho um input em que o usuario coloca um valor de percentual para que eu possa preencher em 3 colunas da tabela que foi criada dinamicamente: moto_atualizado, carro_atualizado e caminhao_atualizado, até aí tudo bem, o codigo está fazendo isso, porém, como a tabela é criada dinamicamente eu preciso de alguma forma enviar o arrayData para meu backend mas quando faço o calculo dentro do loop apos resposta do meu ajax, os valores desses 3 campos chegam como null, não sei se é possível fazer o que pretendo ou se é ainda não sei como faz
       
      <code>
           $(document).ready(function (event) {   let arrayData = []; let percentage; let removal_vehicle; let removal_motorcycle; let removal_tuck; let apply_removal = $('#apply_removal');   // apply_removal.on('click', function () { // percentage = $('#percentage').val();   // $('.table-body tr').each(function () {   // let veiculo = $(this).find('.veiculo').text(); // let moto = $(this).find('.moto').text(); // let caminhao = $(this).find('.caminhao').text();   // let removal_vehicle = parseFloat(veiculo) + (parseFloat(veiculo) * parseFloat(percentage)) / 100; // let removal_motorcycle = parseFloat(moto) + (parseFloat(moto) * parseFloat(percentage)) / 100; // let removal_tuck = parseFloat(caminhao) + (parseFloat(caminhao) * parseFloat(percentage)) / 100;   // arrayData.push({ // removal_vehicle, // removal_motorcycle, // removal_tuck // })   // $(this).find('.veiculo_atualizado').val(removal_vehicle.toFixed(2)); // $(this).find('.moto_atualizado').val(removal_motorcycle.toFixed(2)); // $(this).find('.caminhao_atualizado').val(removal_tuck.toFixed(2)); // }); // });   apply_removal.on('click', function () { percentage = $('#percentage').val();   $('.table-body tr').each(function () {   let veiculo = $(this).find('.veiculo').text(); let moto = $(this).find('.moto').text(); let caminhao = $(this).find('.caminhao').text();   removal_vehicle = parseFloat(veiculo) + (parseFloat(veiculo) * parseFloat(percentage)) / 100; removal_motorcycle = parseFloat(moto) + (parseFloat(moto) * parseFloat(percentage)) / 100; removal_tuck = parseFloat(caminhao) + (parseFloat(caminhao) * parseFloat(percentage)) / 100;   arrayData.push({ removal_vehicle, removal_motorcycle, removal_tuck })   $(this).find('.veiculo_atualizado').val(removal_vehicle.toFixed(2)); $(this).find('.moto_atualizado').val(removal_motorcycle.toFixed(2)); $(this).find('.caminhao_atualizado').val(removal_tuck.toFixed(2));     console.log('Removal Vehicle:', removal_vehicle); console.log('Removal Motorcycle:', removal_motorcycle); console.log('Removal Truck:', removal_tuck); }); });   $('select#removal_table_from').on('change', function (e) { let table_id = $(this).val(); let action = route('removal.removal-values.show', table_id);   $.ajax({ type: "GET", url: action, headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') },   success: function (data) { $('.table-body').empty();   for (let i = 0; i < data.length; i++) { let carro = parseFloat(data[i].CARRO); let moto = parseFloat(data[i].MOTO); let caminhao = parseFloat(data[i].CAMINHAO); let distancia = data[i].DISTANCIA; let origem = data[i].ORIGEM; let destino = data[i].DESTINO; let localidadeOrigem = data[i].LocalidadeOrigem_ID; let localidadeDestino = data[i].LocalidadeDestino_ID;   let newRow = '<tr class="removal-row">' + '<td class="align-middle">' + '<div class="row">' + '<div class="col-1">' + '<span class="font-weight-bold">Origem</span><br>' + '<span class="origem">' + origem + '</span>' + '</div>' + '<div class="col-1">' + '<span class="font-weight-bold">Destino</span><br>' + '<span class="destino">' + destino + '</span>' + '</div>' + '<div class="col-1">' + '<span class="font-weight-bold">KM</span><br>' + '<span class="km">' + distancia + '</span>' + '</div>' + '<div class="col-1">' + '<span class="font-weight-bold">Veículo</span><br>' + '<span class="veiculo">' + carro + '</span>' + '</div>' + '<div class="col-2">' + '<span class="font-weight-bold">Veículo Atualizado</span><br>' + '<input type="text" class="veiculo_atualizado">' + '</div>' + '<div class="col-1">' + '<span class="font-weight-bold">Moto</span><br>' + '<span class="moto">' + moto + '</span>' + '</div>' + '<div class="col-2">' + '<span class="font-weight-bold">Moto Atualizado</span><br>' + '<input type="text" class="moto_atualizado">' + '</div>' + '<div class="col-1">' + '<span class="font-weight-bold">Caminhão</span><br>' + '<span class="caminhao">' + caminhao + '</span>' + '</div>' + '<div class="col-2">' + '<span class="font-weight-bold">Caminhão Atualizado</span><br>' + '<input type="text" class="caminhao_atualizado">' + '</div>' + '</div>' + '</div>' + '</td>' + '</tr>';   $('.table-body').append(newRow); //let row = $('.removal-row:last');   // Calcula o valor atualizado e define nos campos diretamente // let veiculo_atualizado = carro + (carro * percentage) / 100; // let moto_atualizado = moto + (moto * percentage) / 100; // let caminhao_atualizado = caminhao + (caminhao * percentage) / 100; // console.log('PORCENTS: ', percentage); //console.log('Veiculo Atualizado:', veiculo_atualizado, 'Moto Atualizado:', moto_atualizado, 'Caminhao Atualizado:', caminhao_atualizado);   // Define os valores diretamente nos campos da nova linha // row.find('.veiculo_atualizado').val(veiculo_atualizado.toFixed(2)); // row.find('.moto_atualizado').val(moto_atualizado.toFixed(2)); // row.find('.caminhao_atualizado').val(caminhao_atualizado.toFixed(2));   arrayData.push({ carro, moto, caminhao, distancia, origem, destino, localidadeOrigem, localidadeDestino, removal_vehicle, removal_motorcycle, removal_tuck }); }   $('#copy_data_table').val(JSON.stringify(arrayData)); }   }); });   //javascript para o formulario de cadastro // $(document).ready(function (event) { $('#uf').change(function () { let code_city = $(this).val(); let deposit = localStorage.getItem('selected_deposit_id'); let action = route('removal.removal-values.cities', code_city); $.ajax({ type: "POST", url: action, headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, data: { code_city: code_city },   success: function (data) {   $('#city').empty(); $('#deposit').empty();   for (let i = 0; i < data.cities.length; i++) { $('#city').append('<option value="' + data.cities[i].NM + '">' + data.cities[i].NM + '<option>'); }   if (data.deposits.length > 0) { for (let i = 0; i < data.deposits.length; i++) { $('#deposit').append('<option value="' + data.deposits[i].NM + '">' + data.deposits[i].NM + '<option>'); } } else { // $('#deposit').prop('disabled', true); // $('#city').prop('disabled', false); }   $('#city').trigger('change'); } });   });   $('#deposit').on('change', function () { depositId = $(this).val(); localStorage.setItem('selected_deposit_id', depositId); });   $('#uf_destiny').change(function () { let code_city = $(this).val(); let depositDestiny = localStorage.getItem('selected_deposit_destiny_id'); let action = route('removal.removal-values.cities', code_city); $.ajax({ type: "POST", url: action, headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, data: { code_city: code_city },   success: function (data) {   $('#city_destiny').empty(); $('#deposit_destiny').empty();   for (let i = 0; i < data.cities.length; i++) { $('#city_destiny').append('<option value="' + data.cities[i].NM + '">' + data.cities[i].NM + '</option>'); }   if (data.deposits.length > 0) { // $('#deposit_destiny').prop('disabled', false); //$('#city_destiny').empty(); // $('#city_destiny').prop('disabled', true); for (let i = 0; i < data.deposits.length; i++) { $('#deposit_destiny').append('<option value="' + data.deposits[i].NM + '">' + data.deposits[i].NM + '</option>'); } } else { // $('#deposit_destiny').prop('disabled', true); // $('#city_destiny').prop('disabled', false); }   $('#city_destiny').trigger('change'); } }); });   $('#deposit_destiny').on('change', function () { let depositDestinyId = $(this).val(); localStorage.setItem('selected_deposit_destiny_id', depositDestinyId); });   }); </code>
×

Informação importante

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