PHP7 et nocaptcha

Résolu
Bonjour,
j'ai des formulaires avec le nocaptcha de google (captcha invisible), avec php 5.6 ca marche correctement mais avec php7 rien a faire ca ne valide rien et ca n'envoie pas les données
après des test en php7 sans integrer nocaptcha les formulaires marchant inpec
dont je pense que nocaptcha avec php7 ca pose problème
bien sur étant en hebergement mutualisé je n'ai pas accès à la config sauf via htaccess
quelqu'un aurait il eu ce problème et bien sur aurait la solution?



--
Un petit merci vaut mieux qu'une grande ignorance !
Donc si votre sujet est résolu une réponse avec merci c'est pas de refus.

4 réponses

  1. Contributeur
    bonsoir,
    si tu veux de l'aide, n'hésite pas à nous donner de l'information, des messages d'erreur, des extraits de ton code php, tout ce que tu connais et que nous ne connaissons pas.
    1. il n'y a aucun message d'erreur en fait la verification du captcha ne se fait pas et donc les variables POST ne sont pas transmisent il me semble
      pour info je suis chez ovh mutualisé et je n'utilise pas de cms

      le code html
      <head>
      .........
      <script>
      	grecaptcha.reset();
        function onSubmit(token) {
          document.getElementById("form1").submit();	
        }
      </script>
      </head>
      <body>
      ......
          <form action="avisclient-1.php" method="post" id="form1">
              <p><label for="pseudo">Prénom/Nom ou pseudo :</label><br>
                  <input type="text"  id="pseudo" name="pseudo" value=" "></p>
              <p><label for="message">Message :</label><br>
                  <textarea name="message" id="message" rows="5" cols="35"></textarea></p>
      			
      	<p><button class="g-recaptcha bouton" data-sitekey="6LcDpDwUAAAAAP7gDa3T_T-A5ufXNgCTp0K0_n9W" data-callback='onSubmit'>Envoyer</button></p><br><br>
      
          </form>
      .....
      </body>
      

      Le php de verification situé sur avisclient1.php qui marche avec php5.6 mais qui n'est pas traité avec php7
      la page se recharge comme si rien n'avais été vérifié par php et sans message d'erreur
      <?php	
      if(!empty($_POST['g-recaptcha-response'])) {
          $secretKey = 'clé_secrete-du captcha-google-que-je-ne mets-pas-ici';
          $response = $_POST['g-recaptcha-response'];     
          $remoteIp = $_SERVER['REMOTE_ADDR'];
      
          $reCaptchaValidationUrl = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=$secretKey&response=$response&remoteip=$remoteIp");
          $result = json_decode($reCaptchaValidationUrl, TRUE);
      
          if($result['success'] == 1)
      	{
      
      //le script de connexion a la BDD
          include ("include/bdovh.inc.php"); 
      
          $pseudo = strip_tags(mysqli_real_escape_string($link, $_POST['pseudo'])); 
          $message = strip_tags(mysqli_real_escape_string($link, $_POST['message']));  
          $date = date('Y-m-d') ."\n";
          $interdit ="href=(.*)|href|http(.*)|www(.*)|\bcon\b|\bconnard\b|\bsalope\b|\bmerde\b|\bchier\b|\babrutit\b|\benfoiré\b|\bputain\b|\bempafé\b|\bcouille\b|\bbite\b|\bpute\b|\benculé\b|\bprêt\b|\bargent\b|\bcialis\b|\bviagra\b|\bporn\b|\bpharmacy\b|\bbuy\b|\bpenis\b|\bporno\b|\bsuck\b|\bdick\b";
      
      
          if((!empty($_POST['pseudo']))  && (!empty($_POST['message'])) && !preg_match('#'.$interdit.'#i', $_POST["message"]) && !preg_match('#'.$interdit.'#i', $_POST["pseudo"]))
          {   
              mysqli_query($link, "INSERT INTO livre_or VALUES('', '" . $pseudo . "','" . $date . "', '" . $message . "')");
              $ip = $_SERVER["REMOTE_ADDR"];
              $to = 'contact@clownroberto.com' ;
              $subject = 'commentaire posté' ;
              $messmail = $message;
              $messmail1 = $messmail." votre ip est  ".$ip;
              mail($to, $subject, $pseudo, $messmail1);
              echo '<div id="loaderavis"></div><div id="mauvaisavis"><h2>Votre message a été posté</h2><p>Pour voir votre message</p><a href="avisclient-1.php#avis">Cliquez ici</a><br><br></div>';
      
          }
      
          else if ( preg_match('#'.$interdit.'#i', $_POST["message"]) || preg_match('#'.$interdit.'#i', $_POST["pseudo"])) 
      {echo '<div id="loaderavis"></div><div id="mauvaisavis"><h2>Votre message n\'a pas été posté</h2><p>Vous avez posté un lien</p><p>Ou bien</p><p>Votre message ou pseudo contient une injure</p><p><button class="fermeravis">Recommencer</button></p></div>';}
      
          else {
              echo '<div id="loaderavis"></div><div id="mauvaisavis"><h2>Votre message n\'a pas été posté</h2><p>Un champ du formulaire n\'a pas été rempli</p><p><button class="fermeravis">Recommencer</button></p></div>';
      
          }
          mysqli_close($link);
      	}
      
        else 
        {
      echo '<div id="loaderavis"></div><div id="mauvaisavis"><h2>Vous ne semblez pas humain !</h2><p><button class="fermeravis">Recommencer</button></p></div>';
        }
        }
      ?>
      


      En fait ce qui semble poser probleme avec php7 c'est ca
        $secretKey = 'clé_secrete-du captcha-google-que-je-ne mets-pas-ici';
          $response = $_POST['g-recaptcha-response'];     
          $remoteIp = $_SERVER['REMOTE_ADDR'];
      
          $reCaptchaValidationUrl = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=$secretKey&response=$response&remoteip=$remoteIp");
          $result = json_decode($reCaptchaValidationUrl, TRUE);
      

      voila j'ai vu que d'autre aussi ont ce problème mais je n'ai pas trouvé de solution pour l'instant
      1. Contributeur
        pas de soucis chez ovh en 7.2 avec ceci:
        <script src="https://www.google.com/recaptcha/api.js" async defer></script>
        <script>
               function function_TrustMe(token) {
                 document.getElementById("form_TrustMe").submit();
               }
        </script>
        </head>
        <form id='form_TrustMe' method="POST" action="wruinv.php">
        
        
        <button
        id="trustme"
        class="g-recaptcha"
        data-sitekey="pas vraiment secret et pas completement public"
        data-callback="function_TrustMe">
        TrustMe
        </button>
        
        </form>


        $captcha_resp=$_POST['g-recaptcha-response'];
        	//your site secret key
                $secret = 'tres secret';
                //get verify response data
                $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$captcha_resp.'&remoteip='.$_SESSION['yourip']);
                $responseData = json_decode($verifyResponse);
    2. ha si tiens ca me mets une erreur (je suis en https) en php7.0
      Warning: file_get_contents() [function.file-get-contents]: SSL: fatal protocol error in /home/clownrob/www/include/contentavisformulaire.php on line 9

      Fatal error: Call to undefined function: json_decode() in /home/clownrob/www/include/contentavisformulaire.php on line 10

      et en php7.1 la meme erreur plus

      Fatal error: Call to undefined function: mysqli_connect() in line 6

      $link = mysqli_connect($hote, $user, $pass, $base);


      bien sur les variables $hote, $user, $pass, $base sont correctement renseignées pour me connecter à la base et aucune erreur en php5.6
      1. Modérateur
        Bonjour
        Qu'as tu dans le error log d'Apache ?
        As tu activé le allow_url_fopen dans le php.ini ?
        1. je ne peux faire cela en local pour test car le captcha google ne fonctionne qu'avec un NDD et ne s'active pas en local (a cause de data-site-key) --> Comme je suis sur un mutualisé ben php.ini je n'ai pas accès et les log apache sur un mutu je sais pas ou trouver ca

          ici le data-site-key transmet a google l'id du site et le compare avec l'url et donc NND
          <button class="g-recaptcha bouton" data-sitekey="6LcDpDwUAAAAAP7gDa3T_T-A5ufXNgCTp0K0_n9W" data-callback='onSubmit'>Envoyer</button>
        2. Modérateur
          Dans un htaccess :
          php_value allow_url_fopen On
        3. Modérateur
          Et si tu testes avec curl au lieu du file_get_contents ?
          Un truc du genre :

          
          $curl = curl_init();
          curl_setopt_array($curl, array(
              CURLOPT_RETURNTRANSFER => 1,
              CURLOPT_URL => 'https://www.google.com/recaptcha/api/siteverify',
              CURLOPT_POST => 1,
              CURLOPT_POSTFIELDS => array(
                  'secret' => $secretKey,
                  'response' => $captcha
              )
          ));
          $response = curl_exec($curl);
          curl_close($curl)
          
          
          
        4. Bon j'ai fais un phpinfo() et allow_url_fopen est activé en php5.6 et quand je passe en php7 (via htaccess) phpinfo() m'affiche une version 4.4.4.9 de php la je comprend plus rien
          voici ce que je mets dans le htaccess
          SetEnv PHP_VER 5_6 (htaccess php5.6)
          SetEnv PHP_VER 7_0 (htaccess php7)
        5. Modérateur
          Qui est ton hébergeur
          et est-ce qu'il prend en compte la version PHP 7