Ik krijg geen response na het verzenden mail met reCaptcha V3
Wie kan mij op weg helpen?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?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;
}
}
}
}
?>
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;
}
}
}
}
?>
Gewijzigd op 22/03/2020 16:58:34 door Edwin Sabel
Wat voor melding verwacht je?
Bedoel je verder dat de mail leeg is?
Gewijzigd op 22/03/2020 16:33:36 door - Ariën -
Ik krijg wel een bericht bij het terugbel script met de melding en de mogelijkheid om ok te klikken en dan ga je terug naar index.html
Gewijzigd op 22/03/2020 17:02:16 door Edwin Sabel
Maar wat zie je dan wel? En waarom eigenlijk een alert, en niet gewoon direct op het scherm tonen?
Overigens ik krijg nu al spam binnen via dit webformulier??
Als je spam tegen wilt houden, dan is reCaptcha een goede oplossing:
https://stevencotterill.com/articles/adding-google-recaptcha-v3-to-a-php-form
Gewijzigd op 22/03/2020 17:07:00 door - Ariën -
Ik vind dit een mooie oplossing vandaar dat ik dit zo gemaakt heb.
Probeer maar eens.
Gewijzigd op 22/03/2020 17:12:24 door Edwin Sabel
Wat gebeurt er precies? Blijft hij zoeken naar een bepaalde URL? Of zie je een leeg scherm na het volledig laden?
- Ariën - op 22/03/2020 17:06:50:
Maar wat zie je nu dan?
Als je spam tegen wilt houden, dan is reCaptcha een goede oplossing:
https://stevencotterill.com/articles/adding-google-recaptcha-v3-to-a-php-form
Als je spam tegen wilt houden, dan is reCaptcha een goede oplossing:
https://stevencotterill.com/articles/adding-google-recaptcha-v3-to-a-php-form
Ik gebruik juist reCaptcha V3, maar ben blijkbaar nog niet goed bezig.
Misschien moet je de response even uitlezen (ergens loggen), en kijken welke score Google die meegeeft?
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.
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.
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 :-)
Misschien dat een browser het wel oppakt maar het is niet zoals het zou moeten. Dan blijft debuggen dus over!
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-->
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?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;
}
}
}
?>
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;
}
}
}
?>
Gewijzigd op 22/03/2020 17:52:32 door Edwin Sabel
Dat weten we nu nog niet maar doe eens een echo $arrResponse['score']; ?