We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 21101
    • 169 Posts
    Hello

    je suis en train de faire un formulaire xhtml avec vérif coté serveur (en 1 seule page) sous forme de snippet pour intégrer dans modx. quand je prend la page seule, il marche mais quand je met le code dans modx, il marche pas... on dirait qu’il ne lit pas les variables POST huh
    c’est peux etre a cause de l’url rewriting ? huh

    voici le formulaire dans modx http://www.c4w.fr/v3/page-contact.html
    et le formulaire tout seul http://flasheur.free.fr/test/form.php

    la vérification ne se fait pas on dirait embarrassed
      Play no games
      • 11975
      • 2,542 Posts
      Salut,

      A ma connaissance le passage de variables $_POST ne pose pas de pb.
      Sans doute devrais tu poster ton code pour que l’on puisse t’aider plus précisement.
        Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
        • 21101
        • 169 Posts
        voila le code wink

        <?php
        
        if(isset($_POST["fVerif"]))
        	{
        	$echec = "";
        	/*
        	##############################################
        	#     TRAITEMENT DES DONNES DU FORMULAIRE    #
        	##############################################
        	*/
        	
        		$search = array ('@<script[^>]*?>.*?</script>@si', // Supprime le javascript
        						 '@<[\/\!]*?[^<>]*?>@si',          // Supprime les balises HTML
        						 '@([\r\n])[\s]+@',                // Supprime les espaces
        						 '@&(quot|#34);@i',                // Remplace les entités HTML
        						 '@&(amp|#38);@i',
        						 '@&(lt|#60);@i',
        						 '@&(gt|#62);@i',
        						 '@&(nbsp|#160);@i',
        						 '@&(iexcl|#161);@i',
        						 '@&(cent|#162);@i',
        						 '@&(pound|#163);@i',
        						 '@&(copy|#169);@i',
        						 '@&#(\d+);@e',
        						 );                    // Evaluation comme PHP
        		
        		$replace = array ('',
        						 '',
        						 '\1',
        						 '"',
        						 '&',
        						 '<',
        						 '>',
        						 ' ',
        						 chr(161),
        						 chr(162),
        						 chr(163),
        						 chr(169),
        						 'chr(\1)',
        						 );
        			
        		// Nom
        		$nom = preg_replace($search, $replace, $_POST['nom']);
        			if ($nom == "") {
        			$echec = $echec . "<li>Le nom est obligatoire</li>\r";
        			}
        		// Prenom	 
        		$prenom = preg_replace($search, $replace, $_POST['prenom']);
        			if ($prenom == "") {
        			$echec = $echec . "<li>Le prénom est obligatoire</li>";
        			}
        		// Adresse mail
        		$email = $_POST['eMail'];
        			if ($email == "") {
        			$echec = $echec . "<li>L'adresse mail est obligatoire</li>";
        			} else if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$",$email)) {
        			$echec = $echec . "<li>L'adresse mail est invalide</li>";
        			}
        		// Téléphone
        		$tel = $_POST['nTel'];
        			if ($tel == "") {
        			$echec = $echec . "<li>Le numéro de téléphone est obligatoire</li>";
        			} else if (!is_numeric($tel)) {
        			$echec = $echec . "<li>Numéro de téléphone invalide</li>";
        			}
        		// Fax
        		$fax = $_POST['nFax'];
        			if ($fax != "") {
        				$fax = preg_replace($search, $replace, $fax);
        			}
        	// Adresses
        
        		$adress = preg_replace($search, $replace, $_POST['Adress']);
        			if ($adress != "") {
        				$adress = preg_replace($search, $replace, $adress);
        			}
        		$adress2 = preg_replace($search, $replace, $_POST['CompAdress']);
        			if (!empty($adress2)) {
        			$adr  = '<tr>';
        			$adr .= '<th scope="row"></th>';
        			$adr .= '<td>'.$adresse2.'</td>';
        			$adr .= '</tr>';
        			} else {
        			$adr  = '';
        			}
        		// Ville
        		$ville = preg_replace($search, $replace, $_POST['nVille']);
        			if ($ville == "") {
        			$echec = $echec . "<li>La ville est obligatoire</li>";
        			}
        		//Affichage du message d'erreur
        		if(empty($echec)) {
        		$message = '<div id="fSuccess"><h4>Succès</h4>Votre saisie a été prise en compte. Merci.</div>';
        		echo $message;
        		} else {
        		$message = '<div id="fFailed"><h4 class="error">Echec!</h4>Corrigez votre saisie.<ul>'.$echec.'</ul></div>';
        		echo $message;
        		}
            } else {
        	}
        
        if(!isset($_POST["fVerif"]) || $echec != "") {
        ?>
        	<form name="formulaire" id="formulaire" method="post" action="[~[*id*]~]" >
        		<div id="corpForm">
        			<fieldset id="coordonnees">
        				<legend>Vos coordonnées</legend>
        				<div id="civilite">
        				<label for="civM"><input type="radio" value="M." name="civ" id="civM" checked="checked" />M.</label>
        				<label for="civMme"><input type="radio" value="Mme" name="civ" id="civMme" />Mme</label>
        				<label for="civMlle"><input type="radio" value="Mlle" name="civ" id="civMlle" />Mlle</label>
        				</div>
        				<p>
        					<label for="nom" title="Veuillez saisir votre nom en lettres majuscules" class="cAlign"><span class="required">*</span> Nom :</label>
        					<input type="text" name="nom" id="nom" class="fText" title="Veuillez saisir votre nom en lettres majuscules" tabindex="4" value="<?php if(isset($nom)){ echo $nom; } ?>" />
        				</p>
        				<p>
        					<label for="prenom" title="Veuillez saisir votre prénom" class="cAlign"><span class="required">*</span> Prénom :</label>
        					<input type="text" name="prenom" id="prenom" class="fText" title="Veuillez saisir votre prénom" tabindex="5" value="<?php if(isset($prenom)){ echo $prenom; } ?>" />
        				</p>
        				<p>
        					<label for="nSociete" title="Veuillez saisir le nom de votre societe" class="cAlign">Société :</label>
        					<input type="text" name="nSociete" id="nSociete" class="fText" title="Veuillez saisir le nom de votre societe" tabindex="6" value="<?php if(isset($societe)){ echo $societe; } ?>" />
        				</p>
        				<p>
        					<label for="eMail" title="Veuillez saisir votre adresse email" class="cAlign"><span class="required">*</span> E-Mail :</label>
        					<input type="text" name="eMail" id="eMail" class="fText" title="Veuillez saisir votre adresse e-mail" tabindex="7" value="<?php if(isset($email)){ echo $email; } ?>" />
        				</p>
        				<p>
        					<label for="nTel" title="Veuillez saisir votre numero de téléphone" class="cAlign"><span class="required">*</span> Téléphone :</label>
        					<input type="text" name="nTel" id="nTel" class="fText" title="Veuillez saisir votre numero de téléphone" tabindex="8" value="<?php if(isset($tel)){ echo $tel; } ?>" />
        				</p>
        				<p>
        					<label for="nFax" title="Veuillez saisir votre numé de fax" class="cAlign">Fax :</label>
        					<input type="text" name="nFax" id="nFax" class="fText" title="Veuillez saisir votre numé de fax" tabindex="9" value="<?php if(isset($fax)){ echo $fax; } ?>" />
        				</p>
        				<p>
        					<label for="Adress" title="Veuillez saisir votre adresse" class="cAlign">Adresse :</label>
        					<input name="Adress" type="text" id="Adress" class="fText" title="Veuillez saisir votre adresse" tabindex="10" value="<?php if(isset($adresse)){ echo $adresse; } ?>" size="40" maxlength="40" />
        				</p>
        				<p>
        					<label for="CompAdress" title="Veuillez saisir la suite de votre adresse (facultatif)" class="cAlign">Complément d'adresse :</label>
        					<input name="CompAdress" type="text" id="CompAdress" class="fText" tabindex="11" value="<?php if(isset($adresse2)){ echo $adresse2; } ?>" title="Veuillez saisir la suite de votre adresse (facultatif)" size="40" maxlength="40" />
        				</p>
        				<p>
        					<label for="nVille" title="Veuillez saisir le nom de votre ville" class="cAlign"><span class="required">*</span> Ville :</label>
        					<input name="nVille" type="text" id="nVille" class="fText" tabindex="12" title="Veuillez saisir le nom de votre ville" value="<?php if(isset($ville)){ echo $ville; } ?>" />
        				</p>
        				<p>
        					<label for="nPays" title="Veuillez choisir votre pays" class="cAlign"><span class="required">*</span> Pays :</label>
        					<select name="nPays" id="nPays" tabindex="13" title="Veuillez choisir votre pays">
        						<option value="1">Afghanistan</option>
        						[...]
        						<option value="204">Zimbabwe</option>
        					</select>
        				</p>
        			</fieldset>
        			<div id="piedForm">
        			<input type="submit" name="valid" id="valid" value="Envoyer" title="Cliquez sur ce bouton pour valider votre inscription" tabindex="15" />
        			<input type="reset" name="reset" id="reset" value="Réinitialiser" tabindex="16" />
        			</div>
        			<br />
        			<em>* Champs obligatoires</em>
        		</div>
        	<input name="fVerif" type="hidden" value="ok" />
        	</form>
        <?php
        }
        ?>


        voila en gros, si il détecte la variable POST fVerif (on est passé par le formulaire), il traite les données, sinon il affiche le formulaire vide
          Play no games
          • 33175
          • 711 Posts
          Je confirme l’utilisation de $_POST, $_GET, etc. ne posent aucun problème dans les ressources.
          Je n’ai pas lu tout ton code mais j’ai remarqué les balises ouvrante et fermante de PHP :
          <?php ... ?>
          .
          Il faut les supprimer sinon ça ne peut pas fonctionner. En fait, les snippets et les plugins sont exécuter grâce à la fonction eval() de PHP. Cette fonction évalue une chaine de caractères comme du code PHP et cette chaine ne doit pas contenir les balises <?php et ?>
            Sorry for my english. I&#39;m french... My dictionary is near me, but it&#39;s only a dictionary !
            • 21101
            • 169 Posts
            aaah ok
            c’est surement ça smiley je vais aller jeter un coup d’oeil a cette fonction wink
              Play no games
              • 21101
              • 169 Posts
              j’ai viré toutes les balises <?php et ?> ben ça me met un parse error

              Parse error: parse error, unexpected ’<’ in /home/httpd/vhosts/www.c4w.fr/web/v3/manager/includes/document.parser.class.inc.php(705) : eval()’d code on line 106

              il me dit ligne 106, mais de quel fichier ?
                Play no games
                • 1186
                • 202 Posts
                Bonjour,

                Tu dois avoir un "<" qui traine dans ton snippet corrigé...
                Par ailleurs, vérifie que ton snippet est appelé par une page non mise en cache, sinon, le formulaire s’affichera toujours dans son état initial, sans jamais passer les variables POST. C’est ce que j’ai constaté pour ma part lorsque j’ai mis en place des formulaires via des snippet perso !
                  R
                  • 21101
                  • 169 Posts
                  merci pour l’info, j’avais effectivement le ’<’ du <form qui posait probleme, je suis passé par <<<EOD et EOD;

                  maintenant j’ai plus de parse error, mais il ne me détecte pas la variable fVerif >:(
                  pourtant, j’ai bien mis un champ hidden comme ceci
                  <input name="fVerif" type="hidden" value="ok" />
                  <input type="submit" name="valid" id="valid" value="Envoyer" title="Cliquez sur ce bouton pour valider votre inscription" tabindex="15" />
                  <input type="reset" name="reset" id="reset" value="Réinitialiser" tabindex="16" />
                  


                  ensuite je fait un:
                  if(isset($_POST["fVerif"]))
                  	{
                  	// on est passé par le formulaire, donc on va passer a la vérification des champs
                  	}
                  
                  if(!isset($_POST["fVerif"]) || $echec != "") {
                  	{
                  	// on est pas passé par le formulaire OU il y a eu des erreurs donc affichage du formulaire
                  	}
                  


                  il rentre tout le temps dans le 2nd test et pas dans 1er embarrassed
                    Play no games
                    • 1186
                    • 202 Posts
                    vérifie bien les histoires de cache
                    ensuite apparemment ta structure est :

                    if(isset($_POST["fVerif"]))
                    ...
                        } else {
                    	}
                    
                    if(!isset($_POST["fVerif"]) || $echec != "") {
                    ...
                    }
                    


                    ... pourquoi le else vide ? huh

                    si le script n’execute que la deuxième partie, c’est soit à cause du $_POST["fVerif"], soit à cause du $echec (tu as peut-etre un petit bug dans ton code qui fait que $erreur ne reste jamais vide), donc creuser des deux côtés

                    au passage, tu peux utiliser $_POST[’valid’] (nom que tu attribues au bouton submit) à la place de $_POST["fVerif"], ça simplifie, ça fait tout pareil, et pas besoin de champ hidden ! smiley



                      R
                      • 21101
                      • 169 Posts
                      bon je vais potasser ce que tu me dit, merci grin
                        Play no games