Formulaire réaffiché pour correction réponses

Résolu/Fermé
rjl Messages postés 543 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 25 mai 2019 - 1 août 2012 à 22:43
mimigenie Messages postés 1180 Date d'inscription dimanche 3 janvier 2010 Statut Membre Dernière intervention 4 août 2018 - 3 août 2012 à 16:30
Bonjour,

J'ai été bluffé par un tuto sur ce sujet et j'ai mordu à 150%.
Sauf que tout n'était pas expliqué, au moins pour un novice comme moi.
Quand un script se rappelle par Submit, certes, il perd ses données sur le formulaire origine mais il semble que les autres variables locales sont conservées ?
Le système implique un drapeau pour ne pas signaler des erreurs avant remplissage ;
3ème intérêt, les zones sont corrigées dans l'ordre... ce que fait pour partie le formulaire lui-même pour la présence des zones obligatoires (required)

Pour autant, mon ancien script traitait parfaitement l'ensemble mais ne savait pas réafficher, mais cette version réaffiche (?) mais considère les pires erreurs comme acceptées et crée un enregistrement à chaque essai !
Je pense que ça vient d'une mauvaise transmission des données et messages erreur ?

Merci de vos avis sur ces aspects ou de l'indication d'un script intéressant pour ce type de traitement.
Je joins le code concerné et vous remercie par avance. RJL2801
<?php            //  MàJ   RJL2802
// Démarrage de la session (venant de FormPreInsc.php)
	session_start();
	$nomresp = $_SESSION['Login'];
	$cdpw = $_SESSION['MotPasse'];
	$MajPossible = $_SESSION['Initiales'];
//	include_once ("ConnectBDutl.php");
?>		
<!DOCTYPE html>
<html lang="fr"><head>
<?php 
	if ((strlen($message) <= strlen($msg_erreur)) and ($espion == "Vu")) {
		echo "<meta http-equiv='refresh' content='0; url=FormPreInscReaff.php?anais=$anais&civil=$civil&nomadh=$nomadh&prenom=$prenom&ad1=$ad1&ad2=$ad2&cpost=$cpost&ville=$ville&admail=$admail&tfixe=$tfixe&tmob=$tmob'>";	}
?>
<title>Pre Inscriptions</title>
<?php include ("DoctPagesUTL.php"); ?>
				<div class="basgch-acc2">
					<p class="xsmall">Mis à jour le
						01/08/2012 <br />
						par RJL<br />
						_____________<br />
						Site optimisé<br />
						768x1024 pixels
					</p>
					<img class="logo-22-acc2 cotarm" src="../index_fichiers/100px-CA_22.gif" alt="Logo Côtes d'Armor"/>
				<!-- Fin basgch-acc2 --></div>
			<!-- Fin class ctrge --></div>
		<!-- Fin cadnav-acc2 --></div>
	<!-- Fin colgch-acc2 --></div>
	<div class="colreg">	
		<div style="margin-top:0%; margin-left:6.5%"><img style="text-align: center; width: 87%;" alt="Image UTL StQuay" src="../index_fichiers/ImageStQuay2.jpg">
		</div>
	</div><!-- Fin colreg-->
<?php 	
// à ajouter au début du script au cas où magic_quotes soit à ON 
	if (get_magic_quotes_gpc()) 
		{ 
		$_POST = array_map('stripslashes', $_POST); 
		} 
	$msg_erreur = "Erreur. Champs à remplir correctement :
<br/><br/>";
	$msg_ok = "Votre demande a bien été prise en compte.";
	$message = $msg_erreur;
?>
	<div class="formul"> 	
		<p style="color: rgb(153, 0, 0);font-weight:bold;font-size : 190%;"> &nbsp; &nbsp; Formulaire : <span style="font-weight:lighter;font-size:85%;">  Toute donnée associée à un astérisque (*) est obligatoire</span></p>
		<!--Début du "Form" 2621--><form method="POST" action="FormPreInsc.php" >
          <fieldset id="coordonnees"><legend style="color: rgb(153, 0, 0);"><span style="font-weight:bold;font-size:130%;">Coordonnées</legend>
            <p style="color: rgb(153, 0, 0);" >
				<label for="anais">An naiss. * aaaa : </label>
<?php		
				$anais =($_POST['anais']);
				$ancour = date("Y");
				if ($espion == "Vu")	{
					if (empty($anais)) 
						$message .= "Votre année de naissance<br/>";
					if (is_int($anais))
						$message  .= "Année naissance non conforme<br/>";
					else if  (($anais <$ancour - 100) or
							($anais > $ancour -25)) 
							$message .= "Année naissance incorrecte<br/>";	}
?>
				<input id="anais" name="anais"  type="text" required="required" size="4" />
...
				<label for="admail">e-mail.................. : </label>
<?php	
				$admail=($_POST['admail']); 
				if (!(empty ($admail)) and (!(preg_match("#^[a-z0-9._-]{1,}@[a-z0-9._-]{2,}\.[a-z]{2,4}$#",$admail))))
					$message .= "Code e-mail invalide<br/>";		//    adresse mail incorrecte
?>
				<input id="admail" name="admail" type="text" size="80" />
<?php				
				$espion=($_POST['espion']);
?>
				<input name="espion" type="hidden" size="2" value="Vu" />
			</p>
		  </fieldset>
		  <div style="text-align:center;">
		  <input style="color: rgb(153, 0, 0);font-weight:bold;" type="submit" name="envoi" value="Envoi du Formulaire "> &nbsp; &nbsp; &nbsp; &nbsp;
		  <input style="color: rgb(153, 0, 0);" type="reset" value="Recommencer la saisie">
		  </div>
		<!-- Fin du "Form"  2621--></form><br />
    </div><!--fin formul -->
</div><!--fin "Block-page"-->
</body>
</html>

Les zones controlées étant une douzaine, j'ai fait un raccourcis
Jen"ai pas pensé utile de communiquer le code du script ciblé par le communique aussi le code du


2 réponses

mimigenie Messages postés 1180 Date d'inscription dimanche 3 janvier 2010 Statut Membre Dernière intervention 4 août 2018 312
1 août 2012 à 23:00
2 ou 3 remarques par forcément en rapport avec ta question mais qui peuvent être utile :

-évite l'attribut style et préfère la balise style ou mieux encore les feuilles de style, ca te permettra d'y voir plus clair et c'est mieux selon le W3C il me semble

-tu utilises magic_quotes pour sécurisés tes données mais c'est devenu obsolète dans les dernières versions de php, utilise plutot addslashes, mysql_real_escape_string ou htmlspecialchars

-trie un peu ton code car mélanger les vérifications aux champs du formulaires, c'est un vrai fouillis. Mets d'abord ton formulaire puis en-dessous tu commences les vérifications dans l'ordre.

Si on clique sur envoyer
alors on passe à la vérification 2
vérification 2
vérification 3
etc.
et si seulement tout est ok alors on enregistre les infos après
c'être assuré que les données transmises sont sécurisées
sinon message erreur vérif 3
sinon message erreur vérif 2
sinon rien étant donné que le formulaire n'a pas été envoyer.

Si tu organises mieux ton code tu t'y retrouveras beaucoup mieux et tu verras plus facilement les erreurs
0
rjl Messages postés 543 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 25 mai 2019 49
2 août 2012 à 00:10
Bonsoir mimigenie,

Merci de ces indications que je vais mettre en oeuvre J'ai suivi au plus près le tuto http://www.info-3000.com/phpmysql/formulaireredirection/index.php qui était proposé (et j'ai séparé pour cela l'alimentation de mes données pour la rapprocher de mes contrôles )!
Pour les styles, j'utilise le CSS mais avec une feuille souvent trop lourde et si j'ai parfois utilisé 2 feuilles, je suis mal organisé pour cela.
J'étais conscient que quote était une fonction sans rien de magic ! Problème, les autres me semblent poser autant de difficultés à l'utilisation et si je peux en retenir une entre addslashes, mysql_real_escape_string ou htmlspecialchars, c'est en souhaitant qu'elle n'ait jamais à travailler réellement !
Je m'y mets ; à bientôt . RJL2802
0
rjl Messages postés 543 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 25 mai 2019 49
2 août 2012 à 01:01
Les modifs étant impossibles, je clos ce sujet et le reprends plus clairement
RJL2802
0
mimigenie Messages postés 1180 Date d'inscription dimanche 3 janvier 2010 Statut Membre Dernière intervention 4 août 2018 312
2 août 2012 à 10:41
Petit détail, les fonctions mysql_real_escape_string et htmlspecialchars s'utilisent souvent ensemble, la première sert à éviter les injections sql et la seconde transforme le code html en caractère pour éviter l'injection de code malicieux.
0
rjl Messages postés 543 Date d'inscription mardi 16 mars 2004 Statut Membre Dernière intervention 25 mai 2019 49
3 août 2012 à 15:11
Bonjour mimigenie,

Merci de ces précisions ; un peu déçu de la suppression d'un message plus explicite, plus travaillé et plus bref par une modo, j'ai poursuivi dans mon coin en intégrant, pour partie, ce que tu m'avais indiqué.
Le script fonctionne (sauf un blocage, objet d'un nouveau sujet) mais je n'ai pas su choisir pour mysql_real_escape_string et htmlspecialchars !

Motif : des contre-indications courantes préconisant mysqli_real_escape_string et même PDO_MYSQL... à son tour décommandé dans le cadre de PDO (que j'utilise) !
Bilan, je ne sais plus quoi faire... ni même si c'est utile ! Comment savoir si on a besoin de modifier certains caractères et dans quel cas ?
Bien difficile pour un débutant.
Encore merci de tes avis. Bien cordialement RJL2803
0
mimigenie Messages postés 1180 Date d'inscription dimanche 3 janvier 2010 Statut Membre Dernière intervention 4 août 2018 312
3 août 2012 à 16:30
Pour mysql_real_escape_string et htmlspecialchars, le mieux est d'utiliser les 2 !
Tout dépend des données qui passes par ton formulaire mais ces 2 fonctions s'utilisent surtout sur les champs dans lesquels tu peux écrire beaucoup car c'est dans ces champs que les pirates tentent d'injecter des scripts.
0