Bonjour à tous.

Ce formulaire affiche les résultats sur la même page et d'une fois à l'autre conserve les données déjà indiqué lors d'un précédant calcul, histoire de ne pas devoir remplir à nouveau tous les champs déjà remplis lorsque seul un champ est modifié.

Je n'arrive pas à effacer les données du formulaire.


<!DOCTYPE html>
<html lang="fr">
<head>
	<meta charset="utf-8" />
	<title>Formulaire</title>
</head>
<body>
<html>
<?
if (empty($_POST['submit']) or isset($_POST['reset'])):
$prenom='';
echo'Initialisation<br />';
else:
$prenom=$_POST['prenom'];
echo'Bouclage<br />';
endif;
?>

	<form method="post" name="devis">
		<p>
			<label for="prenom">Prénom</label>&nbsp;:<br />
			<input type="text" name="prenom" value="<? echo $prenom;?>" id="prenom" placeholder="Champ obligatoire" size="30" maxlength="50" required="" />
		</p>
		<input type="reset" value="Effacer" id="reset" name="reset" />
		<input type="submit" value="Calcul" id="submit" name="submit" />
	</form>
</body>


Comment faire ? Merci pour vos explications.
Salut,

Le bouton "reset" ne sert pas a effacer le formulaire mais a le réinitialiser, donc si tu a des valeurs par défaut (données que tu réinjecte dans le form avec PHP), il te les remettra lorsque tu cliquera sur ce bouton.
Salut, je ne vois aucune difficulté dans cela ! Il suffit de créer une fonction vider() en javascript qui vient, sur un clic du bouton reset, remettre à vide les champs de ton formulaire. Exemple :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8" />
	<title>Formulaire</title>
<script>
function vider()
{
	document.getElementById("prenom").value = "";
	return false;
};
</script>
</head>
<body>
<html>
<form method="post" name="devis" onreset="return vider();">
<p>
	<label for="prenom">Prénom</label>&nbsp;:<br />
	<input type="text" name="prenom" value="<? echo $prenom;?>" id="prenom" placeholder="Champ obligatoire" size="30" maxlength="50" required="" />
</p>
	<input type="reset" value="Effacer" id="reset" name="reset" />
	<input type="submit" value="Calcul" id="submit" name="submit" />
</form>
</body>
Merci à vous deux pour ces explications.

Que pensez-vous de ce code, sans JavaScript ?

<!DOCTYPE html>
<html lang="fr">
<head>
	<meta charset="utf-8" />
	<title>Formulaire</title>
</head>
<body>
<?
if (empty($_POST['calcul']) or isset($_POST['reset'])):
	$prenom='';
	$boucle=0;
	echo'Initialisation<br />';
else:
	$prenom=$_POST['prenom'];
	$boucle=$_POST['boucle']+1;
	echo'Bouclage n°'.$boucle.'<br />';
endif;
?>
	<form method="post" name="devis">
		<p>
			<label for="prenom">Prénom</label>&nbsp;:<br />
			<input type="text" name="prenom" value="<? echo $prenom;?>" id="prenom" placeholder="Champ obligatoire" size="30" maxlength="50" required="" />
		</p>
		<input type="hidden" value="<? echo $boucle;?>" id="boucle" name="boucle" />
		<input type="submit" value="Effacer" id="reset" name="reset" />
		<input type="submit" value="Calcul" id="calcul" name="calcul" />
	</form>
</body>
</html>
Pyanepsion a écrit :
Que pensez-vous de ce code, sans JavaScript ?


Que tu vas avoir des notices parce que ce tu utilises des variables non initialisées. Ça fonctionne, mais c'est pas super propre.
Pyanepsion a écrit :
Comment les initialiser ?


C'est plutôt ton test qui est à modifier :


<?php
if (!empty($_POST['reset'])):
	$prenom='';
	$boucle=0;
	echo'Initialisation<br />';
elseif (!empty($_POST['calcul'])):
	$prenom=$_POST['prenom'];
	$boucle=$_POST['boucle']+1;
	echo'Bouclage n°'.$boucle.'<br />';
endif;
?>


Voili, voilou
Modifié par jb_gfx (22 Jun 2012 - 16:03)
Ton code ne peut pas fonctionner pour une remise à zéro des champs d'un formulaire. Dans celui-ci, tu mets les champs "prenon" et "boucle", et les champs "reset" et "calcul". Or ces derniers, qui sont de type "submit", ne sont pas transmit au serveur. Il suffit de faire un vidage du contenu de $_POST pour constater que tu n'as que les champs "prenon" et "boucle". Donc je ne vois pas comment tu vas faire pour savoir si ton envoie correspond à une validation ou à une remise à zéro, dans la façon dont tu t'y prends.

Vérifie par toi même, en faisant un vidage du contenu de $_POST. Voici un bout de code qui fera cela :
foreach($_POST as $indice => $valeur)
{
	echo "<div>l'indice : " . $indice . " et la valeur : " . $valeur . "</div>";
}

Modifié par tournikoti (22 Jun 2012 - 23:59)
Autant pour moi ! J'ai dit une grosse bétise. Je n'avais pas vu qu'il avait donner un nom à ces deux "sumbit". Jusqu'à présent, je ne voyais pas l'intérêt de nommer un "submit". Maintenant si ! Désolé.

Sinon, quel est l'intérêt de remettre ces champs à zéro en php ?
Modifié par tournikoti (23 Jun 2012 - 20:55)
Il convient donc sans doute que j'explique exactement ce que je compte faire.

Sur mon site se trouvera une page devis sur laquelle le client pourra tester différentes options pour vérifier laquelle lui convient le mieux. Ainsi, la première fois il va rentrer de nombreuses informations, coller son texte, puis demander le calcul du prix.

Les fois suivantes, il se contentera seulement de modifier une ou deux options. Il serait fastidieux de l'obliger à tout recopier à chaque nouvel essai alors que peu de choses auraient changé.

Il y aura donc 3 boutons :
Réinitialiser tous les champs
Effacer le dernier texte collé
Calculer le prix

Là où ça se complique, c'est que sur les informations demandées, l'une d'entre elles, obligatoire, m'intéresse pour mes statistiques. Il se trouve que cette information ne devrait techniquement pas être modifiée entre les différents essais. Je souhaite donc que cette information ne me soit envoyée qu'au premier calcul.

Pour résumer :
Option 1 obligatoire, qui doit m'être envoyée par courriel au seul premier calcul
Option 2
...
Option n
Texte à coller. Il est le seul champ effacé lorsqu'on clique sur Effacer

[#red]Réinitialiser[/#] [#orange]Effacer[/#] [#green]Calculer[/#]


N'envoyer qu'un unique courriel, au seul premier calcul, est plus compliqué que je ne l'aurais pensé. Je ne trouve pour l'instant pas comment faire.
Tu parles de clients et de plusieurs calculs de devis. Je te conseil d'utiliser une table MySql, pour stocker ces informations :
--> identifiant client.
--> les différentes zones pour le calcul.
--> la zone texte.
--> une variable pour tes statistiques.

Tu peux conditionner les champs que tu désires faire apparaitre dans ton formulaire, en le construisant selon les cas. En gros, tu as quatre états :
--> le client n'existe pas dans la table.
tu peux fournir tous les champs à ton formulaire. C'est le premier envoi.

--> première réception du formulaire.
Tant qu'il y a une erreur dans le formulaire, tu ne crées pas le client.
Si tout est ok, je te conseil d'abord d'envoyer le courrier.
Si celui-ci a été envoyer correctement alors tu peux créer la ligne client.
Si tu veux que ce soit le client qui décide quand il voudra envoyer le courrier alors il te faudra stocker une variable disant si cela a été fait ou pas.

--> autres envoies.
Comme la ligne client existe déjà, tu ne seras pas obligé de fournir tous les champs.
Si tu veux qu'un champs ne soit plus modifiable, il suffit de le passer à "disabled".
Bien entendu, tu devras le faire que si cette zone est renseignée.
Tester si elle est différente de vide ou de zéro.
Ainsi le client visualisera cette information mais ne pourra plus la modifier.

--> autres réceptions.
Pas d'envoi de courrier car c'est déjà fait.
Tu écrases les champs qui sont renseignés.

Ainsi reinitialiser tous les champs, ne concernera que les champs accessible dans "autres envoies". Tu ne détruis pas la ligne client dans la table.

Une question demeure : doit-on conserver toutes les demandes de devis ?
J'ignore comment créer une table, mais ta procédure me semble bonne dans l'absolu, et je vais regarder ça pour la prise de commande.

Ici, cela me semble cependant peu approprié, car qui voudrait s'inscrire quand il ne veut qu'un devis pour savoir s'il deviendra ou non client ? Une solution peut alors cependant consister à créer une entrée client « non-client ». Il y aurait alors une difficulté, puisque le tarif dépend notamment de la nature « Étudiant » ou pas. La seconde difficulté, c'est la variable statistique, qui ne prend son véritable intérêt que dans le cas où le prospect n'est justement pas encore client.

Dans l'immédiat, je suis par contre un peu limité par le temps, car le site devrait théoriquement être opérationnel dans 2 jours.
Modifié par Pyanepsion (23 Jun 2012 - 08:24)
Un forum, c'est fait pour répondre à des questions ponctuelles. Ce que j'expose, ce ne sont que quelques idées et rien d'autres.
Ce que tu demandes, surtout en deux jours, ne peux pas se faire par ordinateurs interposés car cela prend trop de temps. Il te faut une aide car il te manque la connaissance dans le MySql et le Php, mais aussi une façon de solutionner ton problème.

Le premier point est d'identifier ton interlocuteur. Afin de regrouper les demandes, pourquoi ne pas le faire à partir de l'adresse IP ou quelque chose qui puisse identifier ton client (ou prospect) d'une manière unique. La gestion d'un cookie est surement une solution. Tu crées un numéro d'identification dans ton cookie et celui-ci identifie ton client. Et cet identifiant devient le point d'entrée dans ta table. Maintenant s'il supprime le cookie, tu perds toute référence à ce client.

Je comprends que tu ne puisses pas créer une table, mais il ne faut pas oublier que tu ne vas pas gérer deux "pékins" mais plusieurs milliers, voire des millions de clients. Un fichier peut être une solution de contournement mais pas pour très longtemps.

Comme tu le dis, il te faut un "statut" : étudiant, salarié, retraité ... qui peut évoluer dans le temps, et la "nature" du client : prospect, nouvel inscrit, déjà client ... Ce ne sont pas les solutions qui manquent !
Merci Tournikoti pour ces nouvelles idées.
tournikoti a écrit :
Un forum, c'est fait pour répondre à des questions ponctuelles.

Tout à fait. Il vaut mieux comprendre ce qu'on fait, plutôt que de pomper un truc qu'on ne comprend pas.
tournikoti a écrit :
il te manque la connaissance dans le MySql.

Sujet qui ne semble pas si difficile si j'en juge le cours du zéro. Par contre, la structure commerciale devant officiellement ouvrir le premier juillet, il est cependant nécessaire de gérer les urgences et donc de trouver en attendant un pis-aller. La solution que j'ai précédemment exposée a l'inconvénient d'envoyer un courriel à chaque nouveau calcul.
tournikoti a écrit :
Afin de regrouper les demandes, pourquoi ne pas le faire à partir de l'adresse IP ?

C'est bien la solution que j'ai pour l'instant retenue pour gérer les courriels reçus par ce biais.
tournikoti a écrit :
il ne faut pas oublier que tu vas gérer plusieurs milliers, voire des millions de clients.

Ne nous emballons pas. Le site n'a pas 4 semaines, et il n'est pas non plus encore totalement opérationnel. Il ne le sera que dans la soirée du 25, et les 5 jours suivants seront consacrés aux finalisations. La communication n'est pas non plus encore commencée (cela commencera en aout), ce qui fait qu'il y a un peu de marges et fin juillet, la base de données sera donc probablement opérationnelle.
Modifié par Pyanepsion (23 Jun 2012 - 17:50)