Page 1 sur 1

Envoi de données via deux <form> vers deux pages

Posté : 02 oct. 2009, 02:35
par Hezad
Bonjour à tous ! Gros noob que je suis dans le merveilleux monde du php, je me permets de vous soumettre une question qui me taraude !

Voilà, je suis en train de coder (enfin d'essayer du moins) une application qui automatise différents calculs de facturation. J'ai donc une page creer_facture.php à partir de laquelle l'utilisateur peux entrer des données (prestations, nom du client, etc..) et générer la facture finale.

En fait, j'ai deux <form> : une première qui ramène sur la même page (qui contient en fait des boutons qui me permettent de montrer ou de cacher des champs sur la page en question via des variables envoyées en $_POST.
Et une deuxième form qui permet d'envoyer le contenu de ces champs sur une page generer_facture.php (toujours via $_POST) sur laquelle je fais divers calculs sur les charges et les frais.

Mon problème est le suivant : Si j'ajoute un champs dynamiquement via la première form, creer_facture.php se recharge, un champs est bien ajouté mais le contenu des précédents disparait. Et je suis obligé de garder deux forms distinctes puisque je dois renvoyer des données vers generer_facture.php en cliquant sur un bouton.

Je sais pas si je suis super clair ... Je n'ai pas le code sous la main actuellement, mais si mon charabia est incompréhensible, je posterai des extraits du code demain. J'aurais bien donné un lien vers la page mais celle-ci étant sur mon serveur perso et surement loin d'être sécurisée, je préfèrerais éviter de mettre le lien sur un forum public. En esperant que vous comprendrez :)


Merci d'avance !

Re: Envoi de données via deux <form> vers deux pages

Posté : 02 oct. 2009, 08:00
par stopher
Salut ,

Plusieurs solutions ...

1 tu utilises de javascript pour gérer les disparitions/apparitions de tes champs , tu n'as donc plus qu'un form à valider ..

2 lorsque tu valides le premier formulaire , tu enregistres les données , puis tu affiches le form suivant , qui à sa validation viendra compléter les premières données enregistrées .

Ch.

Re: Envoi de données via deux <form> vers deux pages

Posté : 02 oct. 2009, 09:17
par Hezad
Merci de ta réponse !

Quand tu me dis "enregistre les données", tu veux dire dans la bdd (j'envoie, je recharge la page et je récupère) ? Je voulais éviter le plus possible d'accéder à ma base mysql hors d'un fichier spécifique mais si c'est nécessaire ...

Sinon il y a la solution javascript effectivement (que je préfèrerais à priori !). Une des deux méthodes à conseiller en particulier ?

Voici un bout de code :
<?php //menu  ?>
<form action="creer_facture.php" method="POST" style="background-color:rgb(230,230,240)">
<button name="addpresta"><img src="img/icons/application_add.png"/></button>
<button name="delpresta" <?php if($nb_prestas_in_doc<1) echo 'disabled'; ?>><img src="img/icons/application_delete.png"/></button>
<input type="hidden" name="nbprestas" value="<?php echo htmlspecialchars($nb_prestas_in_doc); ?>" />
</form>

<?php // facturation ?>
<form action="generer_facture.php" method="POST">

<label>Nom Client : </label><input type="text" value="" name="nomclient" />
<br/>
<fieldset>
<legend>Prestations</legend>
<?php
for($i=1;$i<=$MAX_PRESTATIONS;$i++)
{
        if($i>$nb_prestas_in_doc) echo '<div style="display:none">';
	if ($i != 1) echo '<br /><br />';
        {
		echo '
		Descriptif : <br />
		<textarea rows="5" cols="110" name="description'.$i.'"></textarea><br />
		<label>Prix HT : </label><input type="text" value="" name="prixht'.$i.'" />
		<br /></div>';
	}
?>
 </fieldset>
Type : <input type="radio" name="facturetype" value="facture" checked />Facture
<input type="radio" name="facturetype" value="devis" />Devis
<br />
TVA appliquée :
<input type="radio" name="gen_tvatype" value="55" checked />5,5%
<input type="radio" name="gen_tvatype" value="196" />19,6%
<input type="radio" name="gen_tvatype" value="noni" />Non imposable
<br /><br/>
<input type="submit" value="Génerer facture" name="generer" />
<input type="submit" value="Annuler" name="annuler" />
</form>
(en fait, je compte le nombre de prestations ajoutées et je cache les champs avec
if($i>$nb_prestas_in_doc) echo '<div style="display:none">';
Merci encore :)