Ik weet niet wat ik fout doe, als ik een mail verstuur krijg ik wel de mail binnen maar geen melding. Hetzelfde type script gebruik ik voor een terugbelverzoek en deze werkt wel. (is een kleinere versie).
Wie kan mij op weg helpen?

<?php
define( "RECAPTCHA_V3_SECRET_KEY", 'XXXXXXXXXXXXXXXXXXXXXXXXXxxxxxxxxxx' );

if ( isset( $_POST[ 'email' ] ) && $_POST[ 'email' ] ) {
$email = filter_var( $_POST[ 'email' ], FILTER_SANITIZE_STRING );
} else {
// set error message and redirect back to form...
// echo "<script> alert('Je bericht kon niet worden verzonden.')</script>";
exit;
}

$token = $_POST[ 'token' ];
$action = $_POST[ 'action' ];
// Sender's Name
$name = $_POST[ "name" ];

// call curl to POST request
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify"; );
curl_setopt( $ch, CURLOPT_POST, 1 );
curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( array( 'secret' => RECAPTCHA_V3_SECRET_KEY, 'response' => $token ) ) );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$response = curl_exec( $ch );
curl_close( $ch );
$arrResponse = json_decode( $response, true );

// verify the response
if ( $arrResponse[ "success" ] == '1' && $arrResponse[ "action" ] == $action && $arrResponse[ "score" ] >= 0.7 ) {
echo "Uw CAPTCHA response was verkeerd";
exit;
} else {

// controle op lege velden..
if ( $_POST[ "email" ] == "" ) {
echo "Niet alle velden zijn ingevuld";
} else {

// Check if the "Sender's Email" input field is filled out
$email = $_POST[ "email" ];

// Sanitize E-mail Address
$email = filter_var( $email, FILTER_SANITIZE_EMAIL );

// Validate E-mail Address
$email = filter_var( $email, FILTER_VALIDATE_EMAIL );
if ( !$email ) {
echo "<script> alert('foutief emailadres')</script>";
} else {
$to = "[email protected]";
$subject = "Website formulier";
$message = "Afzender: " . $_POST[ "name" ] . "\r\n" . "Email: " . $_POST[ "email" ] . "\r\n" ."Bericht: " . $_POST[ "message" ];
$headers = "From:" . $email . "\r\n";

// Message lines should not exceed 70 characters (PHP rule), so wrap it
$message = wordwrap( $message, 70, "\r\n" );

// Send Mail By PHP Mail Function
if ( mail( $to, $subject, $message, $headers ) ) {
echo "<script> alert('$name bedank voor uw bericht. Wij zullen u zo snel mogelijk antwoorden.');
window.location.href='index.html';
</script>";
} else {
echo "<script> alert('Je bericht kon niet worden verzonden. Verander je e-mailadres of neem contact op met $to.')</script>";
exit;
}
}
}
}
?>
Misschien moet je de response even uitlezen (ergens loggen), en kijken welke score Google die meegeeft?
>> Ik gebruik juist reCaptcha V3, maar ben blijkbaar nog niet goed bezig.

Dat je nog geen alert krijgt hoeft niet te betekenen dat je reCaptcha niet goed werkt. Het zijn twee verschillende dingen. Heb je mijn laatste post gelezen? Anders moet je gewoon debuggen. Stap voor stap door je code heenlopen en met een simpele echo 'WERKT'; in een if statement uitvogelen of een if statement wordt uitgevoerd of overgeslagen.
Frank Nietbelangrijk op 22/03/2020 17:15:02

Ik zie overigens ook helemaal geen HTML? en een <script> blok met een alert(); hoort toch wel in een <body> blok thuis welke op zijn beurt weer in een <html> blok hoort.


<!doctype>
<html>
    <head>
        <title>hallo</title>
    </head>
    <body>
        <script>
            alert('test');
        </script>
    </body>
</html>



Dit snap ik niet helemaal, bij mijn terugbel verzoek werkt het wel en heb ik ook geen html blok, alleen de alert functie in mijn php pagina.
Hoe krijg ik een alert, zie een lege site erachter, en ik ga weer terug.
Kan je dit niet via een AJAX-request doen?

Verstuur het formulier via AJAX
- Controleer de invoer (waarom mag ik 'test' invullen?)
- Verstuur deinvoer
- Toon onderin een melding met: "Je verzoek is verstuurd, we bellen je snel mogelijk terug"

Veel netter :-)
>> Dit snap ik niet helemaal, bij mijn terugbel verzoek werkt het wel en heb ik ook geen html blok, alleen de alert functie in mijn php pagina.

Misschien dat een browser het wel oppakt maar het is niet zoals het zou moeten. Dan blijft debuggen dus over!
Ik ben niet bekend met AJAX, en vond dit al knap van mezelf.
Er is geen check op veldinhoud, alleen of deze leeg is. (moet ik nog kijken hoe dat werkt)
Maar blijft waarom de ene wel werkt en de andere niet.
Dit is de wel werkende.
<!--script terugbellen-->
<?php
define( "RECAPTCHA_V3_SECRET_KEY", 'xxxxxxxxxxxxxxxxxxxxxxxxxxx' );

if ( isset( $_POST[ 'phone' ] ) && $_POST[ 'phone' ] ) {
$email = filter_var( $_POST[ 'phone' ], FILTER_SANITIZE_STRING );
} else {
// set error message and redirect back to form...
//header('location: index.html');
exit;
}

$token = $_POST[ 'token' ];
$action = $_POST[ 'action' ];

// call curl to POST request
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify"; );
curl_setopt( $ch, CURLOPT_POST, 1 );
curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( array( 'secret' => RECAPTCHA_V3_SECRET_KEY, 'response' => $token ) ) );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$response = curl_exec( $ch );
curl_close( $ch );
$arrResponse = json_decode( $response, true );

// verify the response
if ( $arrResponse[ "success" ] == '1' && $arrResponse[ "action" ] == $action && $arrResponse[ "score" ] >= 0.5 ) {
echo "Uw CAPTCHA response was verkeerd.";
exit;
} else {
// controle op lege velden..
if ( $_POST[ "phone" ] == "" ) {
echo "Uw telefoonnummer is niet ingevuld";
} else {
$to = "[email protected]";
$subject = "Terugbel formulier";
$message = $_POST[ "phone" ];
$headers = "From:[email protected]";

// Send Mail By PHP Mail Function
if ( mail( $to, $subject, $message, $headers ) ) {
echo "<script> alert('Bedank voor uw bericht. Wij bellen u terug op nummer $message');
window.location.href='index.html';
</script>";
} else {
echo "<script> alert ('Je bericht kon niet worden verzonden. Probeer het later nog eens.')</script>";
exit;
}
}
}
?>
Dat weten we nu nog niet maar doe eens een echo $arrResponse['score']; ?

Reageren