conserver la saisie des champs de mon formulaire

Eléphanteau du PHP | 12 Messages

01 mars 2013, 15:22

Bonjours je viens chercher de l'aide
Mon problème est, que je ne parviens pas à conserver la saisie des champs de mon formulaire après qu'il soit validé ou qu'il y ai une erreur
J'ai pourtant instruit mes champs de cette facon
			 <ol class="forms">
				<li class="name">
				<label for="nom">Nom</label><div class="error"><?php if(isset($erreurnom)) echo $erreurnom;?></div>
				<input id="Nom" <? if($focus == 3) echo "class=\"focus\"";?> name="Nom" maxlength="30" value="<?php if(isset($Nom)) echo $Nom;?>"/> 
			 </li>
Cela vient peut être du code du formulaire ?
	# pas d'erreur donc on continue
	if((!$erreur) && (!$valide)) {

		# traitement du tableau $_POST qui contient les paires name => value
		$message_final = "";
		foreach($_POST as $key => $value) {
			# la boucle passe les champs vides ou non désirés
			# pour passer d'autres champs les séparer par |
			if (!strlen($value) || eregi("(MAX_FILE_SIZE|Objet)", $key)) continue;
			$message_final .= "$key : ".strip_tags($value)."\n";
		}
		# formatage du message de confirmation affiché (option)
		# conversion des sauts de ligne et des caractères spéciaux
		$message = ereg_replace("(\n|\r|\r\n)", "<br>", htmlentities($message_final));
		# si $objets est un tableau : Objet = select donc index = $_POST['Objet']
		if(is_array($objets))
			$objet = "$entete ".$objets[$_POST['Objet']];
		# sinon Objet = input donc en français dans le texte !
		else
			$objet = "$entete ".$_POST['Objet'];
		# si l'email n'est pas renseigné on le remplace par celui
		# du destinataire, en ajoutant une alerte au message
		$final_mail = $_POST['Email'];
		if(empty($_POST['Email'])) {
			$final_mail = $destinataire;
			$message_final .= "\nNe pas répondre par mail : email absent.\n";
		}
		# en-têtes
		$headers = "From: ".$final_mail;
		if(strlen($email_cc))
			$headers .= "\nCC: ".$email_cc;
		if(strlen($email_bcc))
			$headers .= "\nBCC: ".$email_bcc;
		# hôte expéditeur
		$message_final .= "Hôte : ".gethostbyaddr($_SERVER['REMOTE_ADDR']);
		# si pièce jointe on ajoute l'en-tête spécifique avec séparateurs
		if(strlen($piecejointe)) {
			$boundary = "/-------".md5(uniqid(rand()))."-------/"; // séparateur
			$headers .= "\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"$boundary\"\n";
			$message_final =
				"This is a multi-part message in MIME format.\n--$boundary\n".
				"Content-Type: text/plain; charset=ISO-8859-1\n".
				"Content-Transfer-Encoding: 7bit\n\n".
				"$message_final\n\n--$boundary\n".
				"Content-Type: $mimetype; name=\"$name\"\n".
				"Content-Transfer-Encoding: base64\n".
				"Content-Disposition: attachment; filename=\"$name\"\n\n".
				"$piecejointe\n--".
				$boundary."--\n";
		}

		# envoi du mail
		if (@mail($destinataire, stripslashes($objet), stripslashes($message_final), $headers)) {
			@unlink($destination); // suppression de la pièce jointe
			@header("Location: ".$pageconfirme."?mailOK=1");
			
		 } else {
			$pageName = "Echec !";
			$erreur = "Echec de l'envoi ! Merci d'essayer encore";
		 }

	} else {

		$pageName = "Erreur de saisie !";

	} // if(!$erreur)

} // if ($_POST)
?>
Quelqu'un aurait-il une idée SVP?

Eléphanteau du PHP | 25 Messages

01 mars 2013, 19:26

Salut,

Tu peux essayer dans ce genre là :
<label for="nom">Nom</label>
<input id="nom" name="nom" value="<?php if(isset($_POST['nom'])){ echo htmlspecialchars($_POST['nom']); } ?>" maxlength="30" autocomplete="off" />
Après et si je peux me permettre il est préférable de passer par XHR (AJAX) pour éviter le post des formulaires aux saisies incorrecte.
Tout en gardant cette option dans l'hypothèse <noscript>.

Bonne journée