2 formulaires cachés sur même page

Eléphanteau du PHP | 15 Messages

25 janv. 2011, 03:20

Bonjour,
Je cherche à faire un formulaire qui permet à mes clients d'indiquer une adresse de livraison.
Je propose donc à ces derniers de choisir via des boutons radios entre l'adresse de facturation précédemment renseignée ou une autre adresse.
J'utilise du javascript pour afficher le formulaire correspondant au bouton choisi.

Et voilà ce qui devait arriver... ça ne fonctionne pas ...
Voilà mes deux problèmes :
1/ les boutons de validation des deux formulaires semblent se confondent puisque si je clique sur le submit du premier formulaire (celui = adresse de facturation), les messages d'erreur que j'ai mis dans le second formulaire apparaissent (celui d'une autre adresse).
2/ Je n'arrive pas à laisser afficher le formulaire choisi après sa validation.

A l'aide !!!
Merci d'avance

Voici mes codes :

<script language="javascript">
function choixPersonne(chaine)
{
var a = document.getElementById("mon_adresse");
var b= document.getElementById("autre_adresse");

if (chaine == 'cacher1'){

a.style.display = "block";
b.style.display = "none";
}
else if (chaine == 'cacher2'){

a.style.display = "none";
b.style.display = "block";
}

}
</script>

et dans le body :

<table width="85%" border="0">
<tr>
<td align="left">A mon adresse
<input type="radio" name="personne" id="ouiCli" value="oui" onChange="choixPersonne('cacher1')" /></td>
</tr>
<tr>
<td align="left">A une autre adresse<input type="radio" name="personne" id="nonCli" value="non" onChange="choixPersonne('cacher2')" /></td>
</tr>
</table>


Coordonnées de livraison :
<div id="mon_adresse" style="display:none">
<form name="mon_adresse" action="livraison.php5" method="post">
<label> <br />
<br />
<?php echo $data['civilite'];?> <?php echo $data['prenom'];?> <?php echo $data['nom'];?><br>
<?php echo $data['adresse_login'];?> <?php echo $data['cp_login'];?> <?php echo $data['ville_login'];?><br></label>
<label>
<input type="submit" name="mon_adresse" id="mon_adresse" value="Submit">
</label>
</form>
</div>

<form name="autre_adresse" action="livraison.php5" method="post">
<div id="autre_adresse" style="display:none">

<table width="85%" border="0">
<tr>
<td><div id="cadre_identification">
<table width="100%" border="0">
<tr>
<td colspan="3" align="left"><h4><br>
<div id="decalage4">Vos coordonnées</div>
</h4></td>
</tr>
<tr>
<td colspan="3" align="center"><img src="img/barre-inscription.jpg" width="534" height="13" alt="barre-inscription"></td>
</tr>
<tr>
<td width="3%" align="left"><img src="img/nul-identification.gif" width="2" height="25" alt="nul"></td>
<td width="27%" align="left"><label for="civilite"><div id="decalage20">Civilité * </div></label></td>
<td width="70%" align="left"><div id="decalage8"><label><select name="civilite_livraison" id="civilite_livraison">
<?php
$reponse = $bdd->query('SELECT * FROM civilite');
while ($donnees = $reponse->fetch())
{
?>
<option value="<?php echo $donnees['nom_civilite']; ?>" <?php if (!empty($_POST['civilite_livraison'])) {if ($_POST['civilite_livraison']==$donnees['nom_civilite']) print("selected");} ?>><?php echo $donnees['nom_civilite'];?> </option>
<?php
}
?>
</select></label>
<div class="error"><?php if(isset($erreurcivilite_livraison)) echo $erreurcivilite_livraison;?></div></td>
</tr>
<tr>
<td width="3%" align="left"><img src="img/nul-identification.gif" width="2" height="25" alt="nul"></td>
<td width="27%" align="left"><label for="prenom_livraison"><div id="decalage20">Prénom *</div></label></td>
<td width="70%" align="left"><div id="decalage8"><input type="text" name="prenom_livraison" value="<?php if(isset($prenom_livraison)) echo $prenom_livraison;?>" />
<div class="error"><?php if(isset($erreurprenom_livraison)) echo $erreurprenom_livraison;?></div></div></td>
</tr>
<tr>
<td width="3%" align="left"><img src="img/nul-identification.gif" width="2" height="25" alt="nul"></td>
<td width="27%" align="left"><label for="nom_livraison"><div id="decalage20">Nom *</div></label></td>
<td width="70%" align="left"><div id="decalage8"><input type="text" name="nom_livraison" value="<?php if(isset($nom_livraison)) echo $nom_livraison;?>" />
<div class="error"><?php if(isset($erreurnom_livraison)) echo $erreurnom_livraison;?></div></div></td>
</tr>
<tr>
<td width="3%" align="left"><img src="img/nul-identification.gif" width="2" height="25" alt="nul"></td>
<td width="27%" align="left"><label for="adresse_livraison"><div id="decalage20">Adresse *</div></label></td>
<td width="70%" align="left"><div id="decalage8"><input type="text" name="adresse_livraison" value="<?php if(isset($adresse_livraison)) echo $adresse_livraison;?>" />
<div class="error"><?php if(isset($erreuradresse_livraison)) echo $erreuradresse_livraison;?></div></div></td>
</tr>
<tr>
<td width="3%" align="left"><img src="img/nul-identification.gif" width="2" height="25" alt="nul"></td>
<td width="27%" align="left"><label for="cp_livraison"><div id="decalage20">CP *</div></label></td>
<td width="70%" align="left"><div id="decalage8"><input type="text" name="cp_livraison" value="<?php if(isset($cp_livraison)) echo $cp_livraison;?>" />
<div class="error"><?php if(isset($erreurcp_livraison)) echo $erreurcp_livraison;?></div></div></td>
</tr>
<tr>
<td width="3%" align="left"><img src="img/nul-identification.gif" width="2" height="25" alt="nul"></td>
<td width="27%" align="left"><label for="ville_livraison"><div id="decalage20">Ville *</div></label></td>
<td width="70%" align="left"><div id="decalage8"><input type="text" name="ville_livraison" value="<?php if(isset($ville_livraison)) echo $ville_livraison;?>" />
<div class="error"><?php if(isset($erreurville_livraison)) echo $erreurville_livraison;?></div></div></td>
</tr>
<tr>
<td width="3%" align="left"><img src="img/nul-identification.gif" width="2" height="25" alt="nul"><img src="img/nul-identification.gif" width="2" height="25" alt="nul"></td>
<td width="27%" align="left"><label for="pays_livraison"><div id="decalage20">Pays *</div></label>
<td width="70%" align="left"><div id="decalage8"><label><select name="pays_livraison" id="pays_livraison">
<?php
$reponse = $bdd->query('SELECT * FROM pays_login ORDER BY num_pays_login');
while ($donnees = $reponse->fetch())
{
?>
<option value="<?php echo $donnees['nom_pays_login']; ?>" <?php if (!empty($_POST['pays_livraison'])) {if ($_POST['pays_livraison']==$donnees['nom_pays_login']) print("selected");} ?>><?php echo $donnees['nom_pays_login'];?> </option>
<?php
}
?>
</select></label>
<div class="error"><?php if(isset($erreurpays_livraison)) echo $erreurpays_livraison;?></div></div></td>
</tr>
</table>
</div></td>
</tr>
</table>
<label>
<input type="submit" name="autre_adresse" id="autre_adresse" value="Submit">
</label>
</form>

ViPHP
ViPHP | 2577 Messages

25 janv. 2011, 09:21

Bonjour,

Il serait bien de faire une distinction entre les 2 formulaires en ajoutant une variable caché qui te permettent de savoir quel formulaire a été utilisé pour la validation. Ainsi tu pourrais sans problème adapter tes traitements en fonction de cette variable.

Une autre solution serai de ne faire qu'un seul formulaire et de te servir du choix entre les 2 adresses fait par l'utilisateur (via bouton radio) pour aiguiller tes traitements.

Invité
Invité n'ayant pas de compte PHPfrance

25 janv. 2011, 11:01

Bonjour Mazarini et merci pour ta réponse,

Autant pour moi, il manquait juste des variables dans mon premier formulaire...
J'ai rajouté les éléments manquants et ça fonctionne correctement. La bdd est également bien renseignée...

Par contre, je ne vois toujours pas comment résoudre mon second problème, à savoir :
Comment laisser afficher le formulaire choisi après sa validation ? Notamment pour que le client puisse voir les éventuels messages d'erreur s'il a oublié de renseigner certains champs...

Encore merci et A+

ViPHP
ViPHP | 2577 Messages

25 janv. 2011, 11:31

Bonjour,

Pour les tags :
<div id="autre_adresse" style="display:none">
<div id="mon_adresse" style="display:none">

Il faut conditionner la présence ou non de style="display:none"

De plus il faudrait qu'entre les attributs id et name tu utilises des valeurs différentes pour être tranquille.
<form name="autre_adresse" action="livraison.php5" method="post">
<div id="autre_adresse" style="display:none">
<input type="submit" name="autre_adresse" id="autre_adresse" value="Submit">

Invité
Invité n'ayant pas de compte PHPfrance

25 janv. 2011, 16:23

Re,

Bon et bien j'ai essayé de conditionner la présence du style="display:none" en mettant ce code sur les submit :
PREMIER SUBMIT : <input type="submit" name="valid_mon_adresse" id="valid_mon_adresse" value="Submit" onclick="if(document.getElementById('mon_adresse').style.display=='none'){document.getElementById('mon_adresse').style.display='block';document.getElementById('autre_adresse').style.display='none';}"/>
SECOND SUBMIT : <input type="submit" name="valid_autre_adresse" id="valid_autre_adresse" value="Submit" onclick="if(document.getElementById('autre_adresse').style.display=='none'){document.getElementById('autre_adresse').style.display='block';document.getElementById('mon_adresse').style.display='none';}" />

Mais ça ne fonctionne pas ...
Je ne sais pas si c'est cela que tu voulais dire ou pas...

Invité
Invité n'ayant pas de compte PHPfrance

25 janv. 2011, 21:04

J'ai essayé autre chose :
<div id="autre_adresse" style="display:none">
<form name="autre_adresse" action="livraison.php5" method="post" onSubmit="document.getElementById('autre_adresse').style.display='block';">

Mais ça ne fonctionne toujours pas...
Quelqu'un peut m'aider ?
Merci d'avance.