35 messaggi dal 20 agosto 2018
Funziona, ma non viene eseguito quando viene premuto submit, vene eseguito dopo che viene premuto submit
11.886 messaggi dal 09 febbraio 2002
Contributi
Cioè, tu vuoi che inibisca il submit se il catpcha non è stato compilato correttamente?
In questo caso devi verificare che il captcha sia corretto con una richiesta ajax. Poi, in base al risultato della risposta, decidi se va effettuato il submit o no.

Comunque non è un problema se la verifica del captcha si verifica dopo il submit. Semplicemente, a verifica effettuata, esegui anche il codice che va eseguito (es. registrazione di un utente o invio di una mail).

Non posso essere più specifico perché rispondi sempre con 1 riga e non capito né cosa devi realizzare né visto il codice che hai al momento.

ciao,
Moreno

Enjoy learning and just keep making
35 messaggi dal 20 agosto 2018
Ho un form per chiedere informazioni sulla pagina contatti.asp, il la corretta compilazione del form vine controllato da un tasto submit che richiama la funzione verifica (in javascript), che verifica la corretta compilazione del form, se il form è compilato correttamente la mail viene inviata con un semplice codice php tramite action="invia.php". Io volevo aggiungere il controllo del recaptcha al form, in modo tale che se un utente si dimenticasse di eseguire il controllo recaptcha quando viene premuto il tasto submit viene fuori l'errore "devi eseguire recaptcha" e la mail non viene inviata, viene inviata solo se il recaptcha è corretto.
Di seguito lascio codice asp (form), javascript (controlli) e php (invio delle informazioni).
<section class="panel radius">
            <ul class="fa-ul" style="margin: 0px;"> 
                <form name="informazioni" id="informazioni" method="POST" action="/cgi-bin/invio.php">
                    <tr>
                      <td><b>Nome:</b></td><td align="right"><input type=text name="nome" id="nome" placeholder="Inserisci qui il tuo nome."></td>
                    </tr>
                    <tr>
                      <td><b>Cognome:</b></td><td align="right"><input type="text" name="cognome" id="cognome" placeholder="Inserisci qui il tuo cognome."></td>
                    </tr>
                    <tr>
                        <td><b>E-mail:</b></td><td align="right"><input type=text name="email" id="email" placeholder="Inserisci qui la tua E-Mail."></td>
                    </tr>
                    <tr>
                        <td><b>Messaggio:</b></td>
                    </tr>
                    <tr>
                        <td colspan="2">
                              <textarea name="messaggio" id="messaggio" cols="40" rows="5" placeholder="Inserisci qui il tuo messaggio."></textarea>
                        </td>
                    </tr>
                    <tr>
                    <input type="checkbox" value="0" name="privacy" /> 
                        <b>Ho letto <a href="privacy-policy.asp" title="Informativa relativa alla privacy"">l'informativa</a> e accetto le codizioni relative alla privacy.</b>
                         <div class="g-recaptcha" data-sitekey="6LeGi2sUAAAAAJZ2XhAqqV0Ts5m8l1kDdQB0VS6q"></div>
                    </tr>
                    <tr>
                        <td colspan="2" align="right"><input type="submit"  value="Invia" onclick="return verifica(this)"></td>
                    </tr>
                </form>
            </ul>
        </section>






function verifica (informazioni) {
    if (document.informazioni.nome.value == "") {
        alert('Inserire un Nome.');
        return false;
    }
    if (document.informazioni.cognome.value == "") {
        alert('Inserire un Cognome.');
        return false;
    }
    if (document.informazioni.email.value == "") {
        alert('Inserire un E-Mail.');
        return false;
    }
    else{
        var mail = document.informazioni.email.value;
        var formato = /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
        var controllo = mail.match(formato);
        if (!controllo) {
            alert('Inserire un E-Mail valida.');
            return false;
        }
    }
    if (document.informazioni.email.value == "") {
        alert('Inserire un E-Mail.');
        return false;
    }
    if (document.informazioni.messaggio.value == "") {
        alert('Inserire un messaggio.');
        return false;
    }
    if (document.informazioni.privacy.checked == false) {
        alert('Devi accettare le condizioni relative alla privacy.');
        return false;
    }
}



<?  $nome = $_POST['nome'];
            $cognome = $_POST['cognome'];
            $email = $_POST['email'];
            $messaggio = $_POST['messaggio'];

            $message = "Nome: ".$nome."\n Cognome: ".$cognome."\n E-Mail: ".$email."\nMessaggio: ".$messaggio;
            $title = "Nuova richiesta da form";
            $to = "email.studiof@libero.it";
            mail($to,$title,$message) or die ('Errore durante l\'invio del messggio,\n riprova più tardi o chiama in sede');
            print("Il messaggio è stato inviato correttamente");
      header('Location:/contatti.asp ')
?>

Modificato da Maxvilander il 29 agosto 2018 15.31 -
11.886 messaggi dal 09 febbraio 2002
Contributi

header('Location:/contatti.asp ')

Questo è PHP che ridireziona a una pagina ASP Classico. Non è ASP.NET.

Ora che è chiaro quali linguaggi stai utilizzando, ti posso linkare la guida opportuna, che è questa qui che mostra esattamente il tuo caso.
https://www.kaplankomputing.com/blog/tutorials/php/setting-recaptcha-2-0-ajax-demotutorial/

Come vedi, il file php viene richiamato in ogni caso, ma poi è il file php stesso che verifica se il captcha è corretto, prima di inviare la mail.

ciao,
Moreno

Enjoy learning and just keep making
35 messaggi dal 20 agosto 2018
Ciao, ho integrato dalla guida che mi hai indicato tu, ma ora non mi esegue neanche più i controlli di corretta compilazione js sul form.
Allego codici modificati.
function verifica (informazioni) {
    if (document.informazioni.nome.value == "") {
        alert('Inserire un Nome.');
        return false;
    }
    if (document.informazioni.cognome.value == "") {
        alert('Inserire un Cognome.');
        return false;
    }
    if (document.informazioni.email.value == "") {
        alert('Inserire un E-Mail.');
        return false;
    }
    else{
        var mail = document.informazioni.email.value;
        var formato = /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
        var controllo = mail.match(formato);
        if (!controllo) {
            alert('Inserire un E-Mail valida.');
            return false;
        }
    }
    if (document.informazioni.email.value == "") {
        alert('Inserire un E-Mail.');
        return false;
    }
    if (document.informazioni.messaggio.value == "") {
        alert('Inserire un messaggio.');
        return false;
    }
    if (document.informazioni.privacy.checked == false) {
        alert('Devi accettare le condizioni relative alla privacy.');
        return false;
    }
    $(document).ready(function() {
        var informazioni = $("#informazioni");
        contactForm.on("submit", function(e) {
        e.preventDefault();
        var name = $("#nome").val();
        var email = $("#email").val();
        var message = $("#messaggio").val();
            $.ajax({
                type: "POST",
                url: "/cgi-bn/invio.php",
                data: {
                    name: name,
                    email: email,
                    message: message,
                    captcha: grecaptcha.getResponse()
                },
                success: function() {
                console.log("Form inviato correttamente");
                }
            })
        });
    });
}


<?php  
  $nome = $_POST['nome'];
    $cognome = $_POST['cognome'];
    $email = $_POST['email'];
    $messaggio = $_POST['messaggio'];
    $message = "Nome: ".$nome."\n Cognome: ".$cognome."\n E-Mail: ".$email."\nMessaggio: ".$messaggio;
    $title = "Nuova richiesta da form";
    $to = "email.studiof@libero.it";
        mail($to,$title,$message) or die ('Errore durante l\'invio del messggio,\n riprova più tardi o chiama in sede');
        print("Il messaggio è stato inviato correttamente");
    header('Location:/contatti.asp ');
?>
<?php
  $name=stripslashes($_POST["nome"]);
  $email=stripslashes($_POST["email"]);
  $message=stripslashes($_POST["messaggio"]);
  $secret="chiave segreta";
  $response=$_POST["captcha"];
  $verify=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$secret}&response={$response}");
  $captcha_success=json_decode($verify);
  if ($captcha_success->success==false) {
      print("Esegui la verifica captcha.");
  }
  else if ($captcha_success->success==true) {
      print("Errore durante la verifica captcha.\n Perfavore esegui di nuovo la verifica.");
  }
?>

Modificato da Maxvilander il 01 maggio 2019 15:21 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Probabilmente c'è un errore javascript. Apri il riquadro degli strumenti di sviluppo del browser (tasto F12) e vai nella scheda Console. Appaiono errori lì quando carichi la pagina e/o quando provi a inviare il form?
Per esempio: jquery l'hai incluso nella pagina?

Poi ci sono due cose da sistemare:
  • Lato javascript, non hai adattato correttamente il pezzo di codice che hai trovato nell'articolo. Prova così:
    function verifica (informazioni) {
        if (document.informazioni.nome.value == "") {
            alert('Inserire un Nome.');
            return false;
        }
        if (document.informazioni.cognome.value == "") {
            alert('Inserire un Cognome.');
            return false;
        }
        if (document.informazioni.email.value == "") {
            alert('Inserire un E-Mail.');
            return false;
        }
        else{
            var mail = document.informazioni.email.value;
            var formato = /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
            var controllo = mail.match(formato);
            if (!controllo) {
                alert('Inserire un E-Mail valida.');
                return false;
            }
        }
        if (document.informazioni.email.value == "") {
            alert('Inserire un E-Mail.');
            return false;
        }
        if (document.informazioni.messaggio.value == "") {
            alert('Inserire un messaggio.');
            return false;
        }
        if (document.informazioni.privacy.checked == false) {
            alert('Devi accettare le condizioni relative alla privacy.');
            return false;
        }
    
        $.ajax({
                    type: "POST",
                    url: "/cgi-bn/invio.php", //Questo percorso è corretto?? Non è forse cgi-bin?
                    data: {
                        nome: document.informazioni.nome.value,
                        cognome: document.informazioni.cognome.value,
                        email: document.informazioni.email.value,
                        messaggio: document.informazioni.messaggio.value,
                        captcha: grecaptcha.getResponse()
                    },
                    success: function() {
                       alert("Form inviato correttamente");
                    }
                });
        return false;
    }
    
  • Lato PHP, devi spostare il codice di invio della mail in modo che avvenga solo quando la verifica del captcha è stata completata con successo.
    <?php  
      $nome = $_POST['nome'];
      $cognome = $_POST['cognome'];
      $email = $_POST['email'];
      $messaggio = $_POST['messaggio'];
      $message = "Nome: ".$nome."\n Cognome: ".$cognome."\n E-Mail: ".$email."\nMessaggio: ".$messaggio;
      $title = "Nuova richiesta da form";
      $to = "info@lucastudiodinterni.it";
      $secret="TUO_SECRET";
      $response=$_POST["captcha"];
      $verify=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$secret}&response={$response}");
      $captcha_success=json_decode($verify);
      if ($captcha_success->success==false) {
          print("Esegui la verifica captcha.");
      }
      else if ($captcha_success->success==true) {
            mail($to,$title,$message) or die ('Errore durante l\'invio del messaggio,\n riprova più tardi o chiama in sede');
            print("Il messaggio è stato inviato correttamente");
            header('Location:/contatti.asp ');
      }
    ?>
    


Non fare copia-incolla a caso, così non risolverai mai i problemi. Devi comprendere cosa fa ciascun pezzo di codice e usarlo opportunamente nel tuo contesto. Per il futuro, trova qualcuno che possa guidarti nell'apprendimento.

ciao,
Moreno

P.S. oscura il SECRET che hai postato nel tuo codice, non è il caso che altri lo vedano.
Modificato da BrightSoul il 30 agosto 2018 13.22 -

Enjoy learning and just keep making
35 messaggi dal 20 agosto 2018
Grazie per i tuoi consigli. Ho modificato il codice come suggerito da te e i controlli di compilazione funzionano di nuovo, ma se eseguo o non eseguo il controllo captcha e premo submit mi viene sempre fuori "Form inviato correttamente", anche se non viene inviato in nessun caso.
Allego js e php.

function verifica (informazioni) {
    if (document.informazioni.nome.value == "") {
        alert('Inserire un Nome.');
        return false;
    }
    if (document.informazioni.cognome.value == "") {
        alert('Inserire un Cognome.');
        return false;
    }
    if (document.informazioni.email.value == "") {
        alert('Inserire un E-Mail.');
        return false;
    }
    else{
        var mail = document.informazioni.email.value;
        var formato = /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
        var controllo = mail.match(formato);
        if (!controllo) {
            alert('Inserire un E-Mail valida.');
            return false;
        }
    }
    if (document.informazioni.email.value == "") {
        alert('Inserire un E-Mail.');
        return false;
    }
    if (document.informazioni.messaggio.value == "") {
        alert('Inserire un messaggio.');
        return false;
    }
    if (document.informazioni.privacy.checked == false) {
        alert('Devi accettare le condizioni relative alla privacy.');
        return false;
    }
    $.ajax({
        type: "POST",
        url: "/cgi-bin/invio.php",
                data: {
                    nome: document.informazioni.nome.value,
                    cognome: document.informazioni.cognome.value,
                    email: document.informazioni.email.value,
                    messaggio: document.informazioni.messaggio.value,
                    captcha: grecaptcha.getResponse()
                },
                success: function() {
                   alert("Form inviato correttamente");
                }
            });
    return false;
}


<?php 
  $nome = $_POST['nome'];
    $cognome = $_POST['cognome'];
    $email = $_POST['email'];
    $messaggio = $_POST['messaggio'];
    $message = "Nome: ".$nome."\n Cognome: ".$cognome."\n E-Mail: ".$email."\nMessaggio: ".$messaggio;
    $title = "Nuova richiesta da form";
    $to = "email.studiof@libero.it";
    $secret="CHIAVE SEGRETA";
    $response=$_POST["captcha"];
    $verify=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$secret}&response={$response}");
    $captcha_success=json_decode($verify);
    if ($captcha_success->success==false) {
        print("Esegui la verifica captcha.");
    }
    else if ($captcha_success->success==true) {
        mail($to,$title,$message) or die ('Errore durante l\'invio del messaggio,\n riprova più tardi o chiama in sede');
        print("Il messaggio è stato inviato correttamente");
        header('Location:/contatti.asp ');
?>

Modificato da Maxvilander il 01 maggio 2019 15:22 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Ah, giusto, bisogna fare in modo che la pagina php restituisca uno status code di errore (es. 400), altrimenti ricadiamo sempre nella callback success che avviserà "Form inviato correttamente".

Riporto solo il blocco if...else if della pagina php che è quello oggetto di modifica.
In caso di captcha sbagliato o invio email fallito restituisco status code diversi 200 per far capire al chiamante che la richiesta ajax si è conclusa con errore.
if ($captcha_success->success==false) {
  header("HTTP/1.0 400 Bad Request");
} else if ($captcha_success->success==true) {
  if (!mail($to,$title,$message)) {
    header("HTTP/1.0 500 Internal Server Error");
  }
}


Come vedi, ho anche rimosso i vari print e la ridirezione verso contatti.asp che sono superflui in questo caso dato che la pagina php viene invocata con una richiesta ajax.

Lato javascript, oltre alla callback di success puoi anche aggiungerne una di errore, per avvisare l'utente che qualcosa è andato storto.
Modifica da così:
success: function() {
                   alert("Form inviato correttamente");
                }

A così.
success: function() {
                   alert("Form inviato correttamente");
                },
error: function() {
                   alert("Errore nell'invio");
                }

Modificato da BrightSoul il 30 agosto 2018 13.50 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.