C'est ton code le problème (pas le JSON en réponse de recaptcha), une paire de parenthèses doit probablement suivre une variable ce qui donne un appel dynamique de fonction invalide vu que la variable en question n'a pas une valeur de type chaîne.
J'imagine que ce (l'appel dynamique à une fonction) n'est pas ce que tu voulais faire. Des parenthèses ou un dollar mal placé ou en trop ?
C'est ton code le problème (pas le JSON en réponse de recaptcha), une paire de parenthèses doit probablement suivre une variable ce qui donne un appel dynamique de fonction invalide vu que la variable en question n'a pas une valeur de type chaîne.
J'imagine que ce (l'appel dynamique à une fonction) n'est pas ce que tu voulais faire. Des parenthèses ou un dollar mal placé ou en trop ?
- Edité par julp il y a 5 minutes
Ok je veux bien croire qu'il s'agit d'une erreur de parenthèses. Mais ça n'explique pas pourquoi lorsque je vérifie le lien de google:
j’ai testé l’exemple donné concernant les clés comme indiqué sur la page au point 7 : https://www.google.com/recaptcha/api/siteverify?secret=your_secret&response=response_string&remoteip=user_ip_address
voici ce que j’ai saisi dans l’url afin d’effectuer une verification:
Pour ce qui est de la partie php, une partie à été conçue avec un auto de Grafikart pour le validateur de formulaire voici le code source de la page:
<?php
// Ma clé privée
$secret = "6LeRqw4TAAAAAGq9G-4-ScUabLerK2RKDMiPQbRB";
// Paramètre renvoyé par le recaptcha
$response = $_POST['g-recaptcha-response'];
// On récupère l'IP de l'utilisateur
$remoteip = $_SERVER['REMOTE_ADDR'];
$api_url = "https://www.google.com/recaptcha/api/siteverify?secret=".$secret."&response=".$response."&remoteip=".$remoteip ;
$decode = $json_decode(file_get_contents($api_url, true));
if ($decode['success'] == true) {
// C'est un humain
}
else {
// C'est un robot ou le code de vérification est incorrecte
}
?>
<?php
$errors = [];
if(!array_key_exists('firstname', $_POST) || $_POST['firstname'] == ''){
$errors['firstname'] = "Veuillez saisir votre prénom";
}
if(!array_key_exists('lastname', $_POST) || $_POST['lastname'] == ''){
$errors['lastname'] = "Veuillez saisir votre nom de famille";
}
if(!array_key_exists('adressmail', $_POST) || $_POST['adressmail'] == '' || !filter_var($_POST['adressmail'], FILTER_VALIDATE_EMAIL)){
$errors['adressmail'] = "Veuillez saisir un e-mail valide";
}
if(!array_key_exists('message', $_POST) || $_POST['message'] == ''){
$errors['message'] = "Veuillez saisir un message";
}
session_start();
if(!empty($errors)){
header('location: contact.php');
$_SESSION['errors'] = $errors;
$_SESSION['inputs'] = $_POST;
}else{
header('location: contact.php');
$_SESSION['success'] = 1;
$message = $_POST['message'];
//$headers = 'FROM: postmaster@patacowebtest.net';
$mailcontact = $_POST['adressmail'];
$headers .="Reply-To: ".$mailcontact."\r\n";
mail('test@patacowebtest.net', 'Formulaire de contact', $message, $headers);
}
?>
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Document sans titre</title>
</head>
<body>
</body>
</html>
j'ai dabord essayé d’intégrer le code php de OC dans celui de Grafikart mais il me disait erreur à la ligne 14. Je l’ai mis à part, mais j’ai toujours la même erreur.
Je suis trop novice pour bien comprendre. c’est la première fois que j’essaie d’introduire un recaptcha.
Je sais pas d’oû peut venir l’erreur.
Vous pouvez tester le formulaire à la page: http://patacowebtest.net/garderie-les-ptits-loups/contact.php
1. J'essaie le lien de vérification avec mes 2 clés et j'obtiens l'erreur
{ "success":true|false, "error-codes":
invalid-input-response
}
2° j'ai mon code php qui est composé de cette façon:
<?php
// Ma clé privée
$secret = "6LeRqw4TAAAAAGq9G-4-ScUabLerK2RKDMiPQbRB";
// Paramètre renvoyé par le recaptcha
$response = $_POST['g-recaptcha-response'];
// On récupère l'IP de l'utilisateur
$remoteip = $_SERVER['REMOTE_ADDR'];
$api_url = "https://www.google.com/recaptcha/api/siteverify?secret=".$secret."&response=".$response."&remoteip=".$remoteip ;
$decode = $json_decode(file_get_contents($api_url, true));
if ($decode['success'] == true) {
// C'est un humain
}
else {
// C'est un robot ou le code de vérification est incorrecte
}
?>
<?php
$errors = [];
if(!array_key_exists('firstname', $_POST) || $_POST['firstname'] == ''){
$errors['firstname'] = "Veuillez saisir votre prénom";
}
if(!array_key_exists('lastname', $_POST) || $_POST['lastname'] == ''){
$errors['lastname'] = "Veuillez saisir votre nom de famille";
}
if(!array_key_exists('adressmail', $_POST) || $_POST['adressmail'] == '' || !filter_var($_POST['adressmail'], FILTER_VALIDATE_EMAIL)){
$errors['adressmail'] = "Veuillez saisir un e-mail valide";
}
if(!array_key_exists('message', $_POST) || $_POST['message'] == ''){
$errors['message'] = "Veuillez saisir un message";
}
session_start();
if(!empty($errors)){
header('location: contact.php');
$_SESSION['errors'] = $errors;
$_SESSION['inputs'] = $_POST;
}else{
header('location: contact.php');
$_SESSION['success'] = 1;
$message = $_POST['message'];
//$headers = 'FROM: postmaster@patacowebtest.net';
$mailcontact = $_POST['adressmail'];
$headers .="Reply-To: ".$mailcontact."\r\n";
mail('test@patacowebtest.net', 'Formulaire de contact', $message, $headers);
}
?>
Quand je poste le formulaire j'obtiens le résultat suivant:
Fatal error: Function name must be a string in /home/clients/1e291c4fdc2e7aba9aa3099bad6164b8/web/garderie-les-ptits-loups/post_contact.php on line 11
la partie concernée est celle du fichier jason
$decode = $json_decode(file_get_contents($api_url, true));
if ($decode['success'] == true) {
// C'est un humain
}
else {
// C'est un robot ou le code de vérification est incorrecte
}
C'est ce que je disais : pourquoi y a-t-il un $ devant json_decode ? Ce qui en fait un appel dynamique à une fonction or la variable $json_decode ne doit pas exister (donc vaut NULL, ce qui n'en fait pas un nom de fonction valide). Il y a bien un $ qui traîne qui n'a rien à faire là.
C'est ce que je disais : pourquoi y a-t-il un $ devant json_decode ? Ce qui en fait un appel dynamique à une fonction or la variable $json_decode ne doit pas exister (donc vaut NULL, ce qui n'en fait pas un nom de fonction valide). Il y a bien un $ qui traîne qui n'a rien à faire là.
- Edité par julp il y a 6 minutes
Merci juip !
C'est ok ça fonctionne ! Dans le premier Post tu m'avais parlé des parenthèses en trop. j'avais essayé mais ça donnait d'autres erreurs.
J'ai testé sans avoir coché le captcha et le formulaire part quand-même.
J'ai essayé de tourner et retourner le problème, mais je ne voit pas ou placer la portion dans le précédent code que j'ai pour valider l'envoi du formulaire.
Tu ne pouvais commencer par vérifier que $_POST['g-recaptcha-response'] est rempli ? Histoire d'éviter une requête vers le service recaptcha que tu sais d'avance va échouer.
Il y a quoi en else du if ($decode['success']) { dans ton vrai code ?
Tu définis bien une nouvelle paire clé/valeur dans ton tableau $errors, non ? (encore faudrait-il l'initialiser avant)
Désolé, mais comme je l'avais précisé, je viens à peine de commencer php.
Merci à vous tous.
Ricardo Do Vale
reCaptcha Google
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Ricardo Do Vale
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Ricardo Do Vale
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Ricardo Do Vale
Ricardo Do Vale
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Ricardo Do Vale
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Ricardo Do Vale
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Ricardo Do Vale