Page 1 sur 1

form: revenir au form sans effacer?

Posté : 30 déc. 2006, 17:30
par Boro64
Re-Bonjour,
:( Bon, j'ai peut être parlé trop vite ce matin.
Alors voilà, mon form et mes verifs fonctionnent bien, mais j'ai voulu ajouter un boutton de retour au formulaire à chaque fois qu'une erreur est détectée. Jusque là pas de problème; l'ennui c'est que lors du retour au formulaire si le visiteur a oublié un @ (par exemple), et bien ce que toutes ses données...sont effacées. Dur et agaçant si il doit à nouveau tout ré-écrire, non?
Alors, je sais bien (enfin je crois) que le mieux serait d'utiliser du JS, mais:
1) n'existe-t-il pas une manière de faire ça en php uniquement?
2)et même en JS, les données (corrects) précedentes ne seront elles pas effacées tout de même?
Voici mon form:

Code : Tout sélectionner

<form method="post" action="contform.php"> <table> <tr><td>Votre Nom : *<input type="text" name="nom" size="20" /></td> <td>Votre entreprise :<input type="text" name="soc" size="20" /></td></tr> <tr><td>Secteur activit&eacute;: * <select name="act"> <option value="0" selected="selected">--------------</option> <option value="artisan">Artisans</option> <option value="mode">Mode</option> <option value="culture">Culture</option> <option value="service">Service</option> <option value="restauration">Restauration</option> <option value="artistique">Artistique</option> <option value="assoc">Association</option> <option value="festival">Festival</option> <option value="particulier">Particulier</option> <option value="mairie">Mairie</option> <option value="pme">PME</option> <option value="pmi">PMI</option> <option value="communication">Communication</option> <option value="transport">Transport</option> <option value="institution">Institution</option> <option value="prof.liberale">Profession lib&eacute;rale</option> <option value="medicale">M&eacute;dical</option> <option value="paramedical">Para-m&eacute;dical</option> <option value="autre">Autre</option> </select></td> <td>Si besoin, pr&eacute;cisez:<textarea name="precise"></textarea></td></tr> <tr><td>Ville: *<input type="text" name="ville" size="20" /></td> <td>D&eacute;partement :* <select name="dpt"> <option value="0" selected="true">--</option> <option value="64">64</option> <option value="40">40</option> </select></td></tr> <tr><td>Site existant: *<input type="radio" name="choix" value="oui" />Oui <input type="radio" name="choix" value="non" />Non</td> <td>Votre email: *<input type="text" name="email" size="25" /></td></tr> <tr><td>Votre message :<textarea name="mess"></textarea></td> <td><center><input type="submit" value="envoyer" />&nbsp;&nbsp;&nbsp;&nbsp; <input type="reset" value="Annuler" /></center></td></tr> </table> </form>
et voici mon script (j'en suis asses fier, parce que en fait je l'ai pensé tout seul et j'ai trouvé tout seul la méthode des boutons...après moults tatonnements dois je avouer :?
<?php

	$from = $_POST['email'];
	$nom = $_POST['nom'];
	$soc = $_POST['soc'];
	$act = $_POST['act'];
	$preciz = $_POST['precise'];
	$ville = $_POST['ville'];
	$dpt = $_POST['dpt'];
	$email = $_POST['email'];
	$point = strpos($email,".");
	$aroba = strpos($email,"@");
	$adresse_destinataire = '[email protected]';
	$objet = 'Contact commercial heprod';
	$retour_a = $_POST['retour_a'];
	$retour_c = $_POST['retour_c'];
	$message = stripslashes(
	"Nom:".$_POST['nom'] .
	"\n Société:" .$_POST['soc'] .
	"\n Activité:" .$_POST['act'] .
	"\n Precision:" .$_POST['precise'] .
	"\n Ville: " .$_POST['ville'] .
	"\n Departement :"  .$_POST['dpt'] .
	"\n Site existant :" .$_POST['choix'] .
	"\n Email de reponse :" .$_POST['email'] .
	"\n Message :" .$_POST['mess']);
	
	if(empty($nom))
	{
	print ('<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
	<center><b>Le nom doit &ecirc;tre renseign&eacute;</b>
	<br />
	<br />
	<a href="contact.php"><input type="button" name="retour_c" value="retour contact"/>
	</a>
	</center>');
	die();
	}
	
	if(empty($act))
	{
	print ('<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
	<center><b>Le secteur d\'activit&eacute; doit &ecirc;tre renseign&eacute;</b>
	<br />
	<br />
	<a href="contact.php"><input type="button" name="retour_c" value="retour contact"/>
	</a>
	
	</center>');
	die();
	}
	
	if(empty($ville))
	{
	print ('<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
	<center><b>La ville doit &ecirc;tre renseign&eacute;e</b>
	<br />
	<br />
	<a href="contact.php"><input type="button" name="retour_c" value="retour contact"/>
	</a>
	</center>');
	die();
	}
	
	if(empty($dpt))
	{
	print ('<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
	<center><b>Le d&eacute;partement doit &ecirc;tre renseign&eacute;</b>
	<br />
	<br />
	<a href="contact.php"><input type="button" name="retour_c" value="retour contact"/>
	</a>
	</center');
	}
	
	if(empty($email))
	{
	print ("<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
	<center><b>Votre email doit &ecirc;tre renseign&eacute;</b></center>");
	die();
	}

	if($point=='')
	{
	print ('<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
	<center><b>Votre email doit comporter un <b>point</b></b>
	<br />
	<br />
	<a href="contact.php"><input type="button" name="retour_c" value="retour contact"/>
	</a>
	</center>');
	die();
	}
	
	elseif($aroba=='')
	{
	print ('<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
	<center><b>Votre email doit comporter un <b>\'@\'</b></b>
	<br />
	<br />
	<a href="contact.php"><input type="button" name="retour_c" value="retour contact"/>
	</a>
	</center>');
	die();
	}
	
	else
	{
	mail(
	$adresse_destinataire, $objet, $message, $from);
	print('<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
	<center><b>Votre demande a été envoyée avec succès !</b>
	<br />
	<br />
	<a href="index.php"><input type="button" name="retour_a" value="retour accueil"/>
	</a> 
				<a href="contact.php"><input type="button" name="retour_c" value="retour contact"/>
				</a>.</center>');
	exit();
	}
?>
Bon, je suis certain que l'on peut faire mieux et plus simple, mais bon, je débute, hein.. :oops:
Merci de vos bons conseils et avis, pistes et infos

Posté : 30 déc. 2006, 18:06
par jojolapine
bon alors on va revenir un peu sur la méthode...
dans le script de traitement, tu regardes si les champs obligatoires sont remplis... si tel n'est pas le cas, paf tu arrête tout!
je serai d'avis de modifier légèrement le basard...
EN faisant ceci, plutôt que d'arrêter le script, stock tes messages d'erreur dans une variable., ensuite, juste avant d'envoyer le mail, tu faits un tests pour savoir si la variable d'erreur contient qqch, si oui on n'envoi rien et on retourne sur la page du formulaire, sinon, on envoi le mail et on dit merci ;-)
maintenant, si on a pas arrêté le script, il y a bien une raison, c'est pour pouvoir récupérer toutes les variables, qu'elle soient bien remplies ou non...
pour que l'utilisateur n'ai pas à tout reremplir.
pour renvoyer les valeurs dans le formulaire, deux solutions s'offrent à nous, passer les variables par l'url (GET) ou alors les sessions, dans les deux cas, il faudra modifier ton formulaire comme suis:
<input type="text" name="email" size="25" <?php if(isset($_GET['email'])) echo 'value="'.$_GET['email'].'"';?> />
est-ce que tu vois à peu près où je veux en venir ?
après pour indiquer aux utilisateurs qu'ils ont fait une erreur, tu faits un test sur la variable erreur que tu as transmise aussi et tu l'affiche en haut du form par exemple...

Posté : 30 déc. 2006, 19:21
par Truc
Tu peux étudier ce post de la FAQ

Posté : 30 déc. 2006, 19:30
par Boro64
Okkkkkkkkk
Merci Jojolapine et Truc...je vais y travailler de suite...Mais parfois (très souvent en fait) je me dis que je risque de rester longtemps un embryon ;-)
Si vous le permettez je ne mets pas "Resolu"; je script, je test, et je reviens et vous remercier, et mettre Résolu!
D'ac ?
Et merci pour tous vos conseils et piste
A pluche
:lol:

Posté : 30 déc. 2006, 19:32
par jojolapine
nb: tu n'es plus embryon !!! :fete:

Posté : 08 janv. 2007, 20:51
par Boro64
Bonsoir, Bonne année à toutes et tous...et un grand merci à Jojolapine, Truc et Cyrano pour vos aides, conseils et tutaux.
De là à me faire passer à "maître du phpinfo"... :oops: je ne suis vraiment qu'un embryon. Enfin, merci quand même.
Je vous souhaite à toutes et tous de bons dev, certes, mais aussi tout ce que vous pouvez attendre de cette nouvelle année.
Et je vais changer ma signature par : C'est bôôôô le php...! :wink:
Tchô et à bientôt