Partage
  • Partager sur Facebook
  • Partager sur Twitter

reCaptcha Google

Problèmes lors de la soumission du formulaire

Sujet résolu
    12 octobre 2015 à 23:40:09

    bonjour,

    Je poste ce message car j'ai un message d'erreur lors de la soumission de mon formulaire: 

    Fatal error: Function name must be a string in /home/clients/1e291c4fdc2e7aba9aa3099bad6164b8/web/garderie-les-ptits-loups/post_contact.php on line 14

    j' testé le lien de vérification en introduisant les clés la secrète puis la réponse et j'ai un message d'erreur suivant :

    {
     
    "success":true|false,
     
    "error-codes":

    invalid-input-response

    }

    je suis pourtant sur d'avoir bien saisi les 2 clefs par copier coller 

    merci.

    je précise que je suis un bleu en matière de PHP

    • Partager sur Facebook
    • Partager sur Twitter

    Ricardo Do Vale

      12 octobre 2015 à 23:46:48

      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 12 octobre 2015 à 23:55:04

      • Partager sur Facebook
      • Partager sur Twitter
        13 octobre 2015 à 0:05:45

        julp a écrit:

        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:

        URL: https://www.google.com/recaptcha/api/siteverify

        il me met le message d'erreur.

        Merci.

        Ricardo

        • Partager sur Facebook
        • Partager sur Twitter

        Ricardo Do Vale

          13 octobre 2015 à 0:38:32

          Pas compris. L'erreur est bien dans ton code PHP que tu ne veux pas montrer, non ?

          Typiquement :

          $x = [];
          echo $x('foo'); # pas valide, un array n'est pas un nom de fonction
          # vs
          $x = 'htmlspecialchars';
          echo $x('foo');
          

          -
          Edité par julp 13 octobre 2015 à 0:44:35

          • Partager sur Facebook
          • Partager sur Twitter
            13 octobre 2015 à 12:26:00

            Voici comment j’ai constaté les premières erreurs après avoir lu le tuto OC à la page suivante:
            https://openclassrooms.com/courses/protegez-vous-efficacement-contre-les-failles-web/le-captcha
            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:

            https://www.google.com/recaptcha/api/siteverify?secret=6LeRqw4TAAAAAGq9G-4-ScUabLerK2RKDMiPQbRB&response=6LeRqw4TAAAAACv2cu5bykspQ3leI2pycWGXkOO6&remoteip=user_ip_address

            j'ai aussi essayé de le saisir sans l'option remoteip:

            https://www.google.com/recaptcha/api/siteverify?secret=6LeRqw4TAAAAAGq9G-4-ScUabLerK2RKDMiPQbRB&response=6LeRqw4TAAAAACv2cu5bykspQ3leI2pycWGXkOO6

            l'erreur reste la même.

            Pour ce qui est de la page de contact contenant le formulaire, voici le code source:

            <?php
            	session_start();
            ?>
            <!DOCTYPE html>
            <html lang="en"><!-- InstanceBegin template="/Templates/template.dwt" codeOutsideHTMLIsLocked="false" -->
            	<head>
            		<meta charset="UTF-8">
            		<meta http-equiv="X-UA-Compatible" content="IE=edge">
            		<meta name="viewport" content="width=device-width, initial-scale=1">
            		<!-- InstanceBeginEditable name="doctitle" -->
            		<title>Bootstrap - Prebuilt Layout</title>
            		<!-- InstanceEndEditable -->
            		<!-- Bootstrap -->
            		<link href="css/bootstrap.css" rel="stylesheet">
            		<link rel="stylesheet" type="text/css" href="css/mystyles-bootstrap.css">
            		<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
            		<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
            		<!--[if lt IE 9]>
            				<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
            				<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
            			 <![endif]-->
            		<link rel="stylesheet" type="text/css" href="menu_files/responsive-menu.css" />
            		<script src="js/jquery-1.11.2.min.js"></script>
            		<script type="text/javascript" src="menu_files/jquery.responsive-menu.min.js"></script>
            		<script type="text/javascript">
            			jQuery(document).ready(function() {
            				jQuery("#JQResponsiveMenu1").fdResponsiveMenu({windowMinWidth:767,autoHighlightCurrentPage:false,subMenuOpenOnClick:false,subMenuTransitionEasing:"easeOutSine",subMenuTransitionDuration:300});
            			});
            		</script>
            		<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-form-validator/2.2.43/jquery.form-validator.min.js"></script></script>
            		<script src="jQuery-Form-Validator-master/form-validator/lang/fr.js"></script>
            
            		<!-- InstanceBeginEditable name="head" -->
            		<!--<link rel="stylesheet" type="text/css" href="jQuery-Form-Validator-master/form-validator/theme-default.min.css">
            	-->
            		<link rel="stylesheet" type="text/css" href="maps_files/google-maps.css" />
            		<script type="text/javascript" src="https://maps.google.com/maps/api/js?sensor=false"></script>
            		<script type="text/javascript" src="maps_files/jquery.google-maps.min.js"></script>
            		<script type="text/javascript">
            	jQuery(document).ready(function() {
            		jQuery("#JQGoogleMaps1").fdGoogleMaps({sourceURL:"maps_files/locations.xml",mapCenterLat:46.5418234,mapCenterLng:6.636578999999983,mapZoom:16,mapType:"road",mapMarkerImage:"maps_files/icons/marker.png",mapMarkerShadow:"maps_files/icons/shadow.png",mapLineEnabled:true,mapLineColor:"#AA5500",infoWindowOffsetX:8,infoWindowOffsetY:-28,filterVisible:true,filterColumns:3,filterCellSpacing:5,filterLanguageInfo:"Total objects on the map _AMOUNT_ of _TOTAL_",tableVisible:true,tableDisplayLength:5,tableBorderWidth:1,tableLanguageLengthMenu:"Display _MENU_ records per page",tableLanguageSearch:"Search:",tableLanguageZeroRecords:"Nothing found - sorry",tableLanguageInfo:"Showing _START_ to _END_ of _TOTAL_ records",tableLanguageInfoFiltered:"(filtered from _MAX_ total records)",popupPreloaderImage:"maps_files/images/preloader.gif",popupSlideWidth:500,popupSlideHeight:300,popupSlideScaleMode:"fit",popupLanguageInfo:"_AMOUNT_ of _TOTAL_"});
            	});
            		</script>
            		<script src='https://www.google.com/recaptcha/api.js'></script>
            		<!-- InstanceEndEditable -->
            	</head>
            	<body>
            	<nav class="container-fluid">
            		<div class="row navbar-fixed-top">
            			<div class="col-sm-2 hidden-xs background-gradiant padd-rt-2">
            				<img class="img-responsive logo" src="img/logomenu.png" alt="logo" />
            			</div>
            			<div class="col-xs-12 col-sm-10 menu_dr_down_container">
            				<div id="JQResponsiveMenu1" class="JQResponsiveMenu rm_drop rm_down">
            				<img class="visible-xs-inline-block idden-sm img-responsive logo" src="img/logomenu.png" alt="logo" />
            					<ul class="rm_top_menu pull-right">
            						<li class="rm_html home">
            							<div class="rm_wrapper"><a href="index.htm"><span class="rm_caption"><span class="rm_title"><span class="glyphicon glyphicon-home hidden-xs"></span><span class="rm_text visible-xs">Acceuil</span></span></span></a></div>
            						</li>
            						<li class="rm_html about">
            							<div class="rm_wrapper"><a href="about.htm"><span class="rm_caption"><span class="rm_title">A Propos</span></span></a></div>
            						</li>
            						<li class="rm_html structure">
            							<div class="rm_wrapper"><a><span class="rm_caption"><span class="rm_title rm_margin-title"><span class="hidden-sm">La </span>Structure</span></span><span class="rm_open_icon rm-margin-icon-down"></span></a></div>
            							<ul class="rm_sub_menu">
            								<li class="rm_has_childs secteurs">
            									<div class="rm_wrapper"><a href="#"><span class="rm_caption"><span class="rm_title">Les Secteurs</span></span><span class="rm_open_icon rm-margin-icon-down-submenu"></span></a></div>
            									<ul class="rm_sub_menu rm_sub_menu_niv2">
            										<li class="nurserie">
            											<div class="rm_wrapper"><a href="#"><span class="rm_caption"><span class="rm_title">La Nurserie</span></span></a></div>
            										</li>
            										<li class="troteurs">
            											<div class="rm_wrapper"><a href="#"><span class="rm_caption"><span class="rm_title">iLes Troteurs</span></span></a></div>
            										</li>
            										<li class="grands">
            											<div class="rm_wrapper"><a href="#"><span class="rm_caption"><span class="rm_title">Les Grands</span></span></a></div>
            										</li>
            									</ul>
            								</li>
            								
            								<li class="change">
            									<div class="rm_wrapper"><a href="#"><span class="rm_caption"><span class="rm_title">La Salle de Change</span></span></a></div>
            								</li>
            								<li class="toilettes">
            									<div class="rm_wrapper"><a href="#"><span class="rm_caption"><span class="rm_title">Les Toilettes des Grands</span></span></a></div>
            								</li>
            								<li class="armoire">
            									<div class="rm_wrapper"><a href="#"><span class="rm_caption"><span class="rm_title">L'Armoire-Bricolage</span></span></a></div>
            								</li>
            								<li class="jardin">
            									<div class="rm_wrapper"><a href="jardin.htm"><span class="rm_caption"><span class="rm_title">Le Jardin</span></span></a></div>
            								</li>
            								<li class="bureau">
            									<div class="rm_wrapper"><a href="#"><span class="rm_caption"><span class="rm_title">Le Bureau</span></span></a></div>
            								</li>
            							</ul>
            						</li>
            						<li class="rm_html pedagogie">
            							<div class="rm_wrapper"><a href="#"><span class="rm_caption"><span class="rm_title"><span class="hidden-sm">La </span>Pédagogie</span></span></a></div>
            						</li>
            						<li class="rm_html repas">
            							<div class="rm_wrapper"><a href="#"><span class="rm_caption"><span class="rm_title"><span class="hidden-sm">Les </span>Repas</span></span></a></div>
            						</li>
            						<li class="rm_html horaires-tarifs">
            							<div class="rm_wrapper"><a href="horaires-tarifs.htm"><span class="rm_caption"><span class="rm_title">Horaires<span class="hide-et"> & </span><span class="visible-slash">/</span>Tarifs</span></span></a></div>
            						</li>
            						<li class="rm_html liens">
            							<div class="rm_wrapper"><a><span class="rm_caption"><span class="rm_title rm_margin-title"><span class="glyphicon glyphicon-link visible-sm-inline"></span><span class="hidden-sm">Liens</span></span></span><span class="rm_open_icon rm-margin-icon-down"></span></a></div>
            							<ul class="rm_sub_menu">
            								<li class="bbnageurs">
            									<div class="rm_wrapper"><a href="#"><span class="rm_caption"><span class="rm_title">BB Nageurs</span></span></a></div>
            								</li>
            								<li class="cours-anglais">
            									<div class="rm_wrapper"><a href="#"><span class="rm_caption"><span class="rm_title">Cours d'Anglais</span></span></a></div>
            								</li>
            							</ul>
            						</li>
            						<li class="rm_html contact">
            							<div class="rm_wrapper"><a href="contact.php"><span class="rm_caption"><span class="rm_title"><span class="glyphicon glyphicon-envelope visible-sm-inline"></span><span class="hidden-sm">Contact</span></span></span></a></div>
            						</li>
            					</ul>
            				</div>
            			</div>
            		</div>
            		<div class="row">
            			<div class="col-lg-12 breadcrumb-container" style="top: auto">
            				<ol class="breadcrumb">
            					<li><a href="#"><span class="btn-breadcrumb home">Acceuil</span></a></li>
            					<!-- InstanceBeginEditable name="fil-ariane" -->
            					<!-- InstanceEndEditable -->
            				</ol>
            			</div>
            		</div>
            	</nav>
            	<header class="container-fluid">
            		<div class="row">
            			<div class="col-lg-12 text-center">
            				<h1><span class="line-h1"><strong>
            					<!-- InstanceBeginEditable name="titre-page" -->Nous contacter<!-- InstanceEndEditable --></strong></span><br>
            				<span class="line-h1 hide"><strong>Les P'tits Loups</strong></span></h1>
            			</div>
            		</div>
            	</header>
            	<section class="container-fluid">
            		<!-- InstanceBeginEditable name="content-page" -->
            		
              	  <div class="row">
            			<div class="col-xs-12">
            				<?php if(array_key_exists('errors', $_SESSION)): ?>
                            <div class="alert alert-danger">
                                <? echo implode('<br>', $_SESSION['errors']); ?>
                            </div>
                        <?php endif; ?>
            
            
                       <?php if(array_key_exists('success', $_SESSION)): ?>
                            <div class="alert alert-success">
                                Votre email a bien été envoyé
                            </div>
                        <?php endif; ?>
            			</div>
            	  </div>
            	  
            		<div class="row">
            			<div class="col-xs-11 col-xs-centered col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2">
            				<h2>Formulaire</h2>
            					<form id="formulaire" action="post_contact.php" method="post" class="row">
            			<div class="col-xs-12">
            				<div class="row">
            					<div class="col-xs-12 col-sm-6 form-group">
            						<label class="control-label" for="firstname">Prénom <span class="glyphicon glyphicon-asterisk"></span></label>
            						<input name="firstname" type="text" data-validation="alphanumeric" data-validation-error-msg="Veuillez saisir votre Prénom" required="required" autofocus class="form-control" id="firstname" placeholder="Votre Prénom" tabindex="1" title="Veuillez saisir votre prénom" autocomplete="on" value="<?= isset($_SESSION['inputs']['firstname']) ? $_SESSION['inputs']['firstname'] : ''; ?>">
            					</div>
            					<div class="col-xs-12 col-sm-6 form-group">
            						<label class="control-label" for="lastname">Nom <span class="glyphicon glyphicon-asterisk"></span></label>
            						<input name="lastname" type="text" data-validation="alphanumeric" data-validation-error-msg="Veuillez saisir votre nom de famille" required="required" class="form-control" id="lastname" placeholder="Votre nom" tabindex="2" title="Veuillez saisir votre nom" autocomplete="on" value="<?= isset($_SESSION['inputs']['lastname']) ? $_SESSION['inputs']['lastname'] : ''; ?>">
            					</div>
            				</div>
            				<div class="row">
            					<div class="col-xs-12 col-sm-6 form-group">
            						<label class="control-label" for="adressmail">Adresse e-mail <span class="glyphicon glyphicon-asterisk"></span></label>
            						<input name="adressmail" type="email" data-validation="email" data-validation-error-msg="Veuillez saisit votre adresse mail" required="required" class="form-control" id="adressmail" placeholder="Votre email" tabindex="3" title="Veuillez saisir votre email" autocomplete="on" value="<?= isset($_SESSION['inputs']['adressmail']) ? $_SESSION['inputs']['adressmail'] : ''; ?>">
            					</div>
            					</div>
            				<div class="row">
            					<div class="col-xs-12 form-group">
            						<label class="control-label" for="message">Message <span class="glyphicon glyphicon-asterisk"></span></label>
            						<textarea name="message" rows="10" required class="form-control" id="message" placeholder="Indiquez-nous votre requête ici" tabindex="4" title="Veuillez saisir votre message"><?= isset($_SESSION['inputs']['message']) ? $_SESSION['inputs']['message'] : ''; ?></textarea>
            					</div>
            				</div>
            				<div class="row">
            					<div class="col-xs-12">
            						<div class="g-recaptcha" data-sitekey="6LeRqw4TAAAAACv2cu5bykspQ3leI2pycWGXkOO6"></div>
            					</div>
            				</div>
            				<div class="row">
            					<div class="col-xs-12 form-group">
            						<button type="reset" class="pull-left btn btn-default">Reset</button>
            						<button type="submit" class="pull-right btn btn-default">Submit</button>
            					</div>
            				</div>
            			</div>
            			  </form>
            <?= var_dump($_SESSION); ?>
            			</div>
            		</div>
            		<div class="row">
            			<div id="googlemapcontainer" class="col-xs-11 col-xs-centered col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2">
            				<h2>Nous trouver</h2>
            				<div id="JQGoogleMaps1" class="JQGoogleMaps">
            					<div id="map_canvas"></div>
            				</div>
            			</div>
            			
            		</div>
            <!-- InstanceEndEditable -->
            	</section>
            	<footer class="container-fluid">
            		<div class="row panel-footer">
            			<div id="blocadress" class="col-xxs-12 col-xs-6 col-sm-5 col-sm-push-1 col-md-3 col-md-push-0 column">
            				<div class="jumbotron-footer">
            					<h3 class="text-center">Nous contacter</h3>
            					<address>
            						<strong>Garderie Les P'tits Loups</strong><br>
            						La Clochatte 5<br>
            						1052 Le Mont sur Lausanne<br>
            						<span class="glyphicon glyphicon-phone-alt"></span>: <a href="tel:0216479961">021/647.99.61</a><br>
            						<span class="glyphicon glyphicon-envelope"></span>: <a href="mailto:p-loups@bluewin.ch">p-loups@bluewin.ch</a>
            					</address>
            				</div>
            			</div>
            			<div id="blocpartner" class="col-xxs-12 col-xs-6 col-sm-5 col-sm-push-1 col-md-3 col-md-push-6 column">
            				<div class="jumbotron-footer">
            					<h3 class="text-center">Nos Partenaires</h3>
            					<a href="#"><img src="img/bbnageurs.jpg" class="img-responsive img-partenaires" alt="logo BB Nageurs" /></a>
            					<a href="#"><img src="img/humming_birds.png" class="img-responsive img-partenaires" alt="logo BB Nageurs" /></a>
            				</div>
            			</div>
            			<div class="col-xs-12 col-sm-10 col-sm-push-1 col-md-6 col-md-push-0 col-md-pull-3 column sitemap-jumbotrom">
            				<div class="jumbotron-footer">
            					<div class="row">
            						<div class="col-lg-12">
            							<h3 class="text-center">Sitemap</h3>
            						</div>
            						<div class="col-xs-6 nav-sitemap">
            							<ul class="nav nav-pills nav-stacked">
            								<li><a class="home" href="index.htm">Acceuil</a></li>
            								<li><a class="about" href="about.htm">A Propos de Nous</a></li>
            								<li><a class="pedagogy" href="#">La Pédagogie</a></li>
            								<li><a class="repas" href="#">Les Repas</a></li>
            								<li><a class="horaires-tarifs" href="horaires-tarifs.htm">Horaires &amp; Tarifs</a></li>
            								<li class="nav-pills-rubric liens">Liens
            									<ul class="nav nav-pills nav-stacked">
            										<li><a class="bbnageurs" href="#">BB Nageurs</a></li>
            										<li><a class="cours-anglais" href="#">Cours d'Anglais</a></li>
            									</ul>
            								</li>
            								<li><a class="contact" href="contact.php">Contact</a></li>
            							</ul>
            						</div>
            						<div class="col-xs-6 nav-sitemap">
            							<ul class="nav nav-pills nav-stacked">
            								<li class="nav-pills-rubric structure">La Structure
            									<ul class="nav nav-pills nav-stacked">
            										<li class="nav-pills-rubric secteurs">Les Secteurs
            											<ul class="nav nav-pills nav-stacked">
            												<li><a class="nurserie" href="#">La Nurserie</a></li>
            												<li><a class="trotteurs" href="#">Les Trotteurs</a></li>
            												<li><a class="grands" href="#">Les Grands</a></li>
            											</ul>
            										</li>
            										<li><a class="change" href="#">Salle de Change</a></li>
            										<li><a class="toilettes" href="#">Toilettes des Grands</a></li>
            										<li><a class="armoire" href="#">L’armoire-bricolage</a></li>
            										<li><a class="jardin" href="jardin.htm">Le Jardin</a></li>
            									</ul>
            								</li>
            							</ul>
            						</div>
            					</div>
            				</div>
            			</div>
            		</div>
            	</footer>
            	<!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> 
            	<!-- Include all compiled plugins (below), or include individual files as needed -->
            	<!-- InstanceBeginEditable name="plugins" -->
            	<!-- InstanceEndEditable --> 
            	<script src="js/bootstrap-3.3.4.js"></script>
            
            	<script src="js/jquery.eqheight.js"></script>
            
            	<script type="text/javascript">
            	$(document).ready(function() {
            		 $(".row").eqHeight(".column");
            	});
            	</script>
            	<!-- InstanceBeginEditable name="add-scripts" -->
            	<script> 
            		$ . validate ({ 
            		modules :  'html5',
            		borderColorOnError : '#F00',
            		}); 
            	</script>
            	<!-- InstanceEndEditable --> 
            </body>
            <!-- InstanceEnd --></html>
            <?php
            	unset($_SESSION['inputs']);
            	unset($_SESSION['errors']); 
            	unset($_SESSION['success']);
            ?>



            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

            Merci.

            -
            Edité par Pataco80 13 octobre 2015 à 12:29:14

            • Partager sur Facebook
            • Partager sur Twitter

            Ricardo Do Vale

            Anonyme
              13 octobre 2015 à 12:36:47

              Bonjour

              donne la partie de ton code qui pose problème

              code trop long

              • Partager sur Facebook
              • Partager sur Twitter
                13 octobre 2015 à 13:00:10

                Samples X a écrit:

                Bonjour

                donne la partie de ton code qui pose problème

                code trop long


                je me pose 2 questions?

                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
                    }   

                Merci.

                -
                Edité par Pataco80 13 octobre 2015 à 13:02:44

                • Partager sur Facebook
                • Partager sur Twitter

                Ricardo Do Vale

                  13 octobre 2015 à 14:03:11

                  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 13 octobre 2015 à 14:12:22

                  • Partager sur Facebook
                  • Partager sur Twitter
                    13 octobre 2015 à 14:27:11

                    julp a écrit:

                    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.

                    Encore Merci

                    Ricardo

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Ricardo Do Vale

                      13 octobre 2015 à 14:46:57

                      Dans le premier Post tu m'avais parlé des parenthèses en trop.

                      Désolé mais il me semble bien avoir aussi évoqué le dollar (il n'y a pas 50 composants pour faire un appel dynamique de toute façon) :

                      Des parenthèses ou un dollar mal placé ou en trop ?

                      -
                      Edité par julp 13 octobre 2015 à 14:59:55

                      • Partager sur Facebook
                      • Partager sur Twitter
                        13 octobre 2015 à 18:50:06

                        Salut les amis,

                        J'ai crié victoire trop top.

                        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.

                        c'est bon... je suis largué.

                        Quelqu'un à un conseil ?

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Ricardo Do Vale

                          13 octobre 2015 à 19:04:32

                          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)

                          -
                          Edité par julp 13 octobre 2015 à 19:07:06

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            13 octobre 2015 à 19:23:14

                            Salut,

                            La valeur g-recaptcha-response est donnée avec le l'envoi de ton formulaire.

                            Pour valider ton formulaire, il faut soumettre cette variable g-recaptcha-response à Google pour savoir si le captcha est ok ou pas.

                            Regarde ici, tu as toute la doc sur ton compte recaptcha :

                            https://www.google.com/recaptcha/admin

                            Bon, c'est vrai que Google a merdé en passant de recaptcha V1 à V2. Ca a totalement changé !

                            Mais bon, on a pas beaucoup d'autre choix que d'écouter le "sieur Google"...

                            • Partager sur Facebook
                            • Partager sur Twitter
                              13 octobre 2015 à 20:02:58

                              Je cherche à intégrer ce code à l'intérieur de celui du validateur afin de permettre un affichage d'un message d'erreur en cas d'oubli.

                              mon code php pour le validateur est structuré en 2 partie.

                              une mentionant les messages d'erreur et l'autre traite l'envoi.

                              <?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);
                              }
                              ?>

                              Désolé, mais comme je l'avais précisé, je viens à peine de commencer php.

                              Merci à vous tous.

                              • Partager sur Facebook
                              • Partager sur Twitter

                              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.
                              • Editeur
                              • Markdown