Récupération de donnée d'un formulaire.

Cireultra
Invité n'ayant pas de compte PHPfrance

16 juil. 2006, 18:10

Bonjour,

Voici mon problème.
J’ai créé un formulaire (bon de commande) dans lequel il y a plusieurs listes.
Je récupère les données du formulaire une fois rempli par Email (php).
Dans mes listes il n’y avait pas de ‘value=x’ au départ, donc dans l’email il y avait bien la valeur de <?php echo $bouteille[]; ?> qui est une description du produit.
Maintenant que j’ai rajouté ‘value=x’ (prix) il me renvoi la valeur de ‘value’ (dans l’email) et pas celle du code php.
J’ai besoin de la valeur de ‘value’ pour chaque lignes car au moment du choix dans la liste j’affecte la valeur de ‘value’ dans un autre champ du formulaire pour mes calculs de prix.
Comment faire pour récupérer les deux valeurs ou une au choix.


Bout de code :

<select name="libelle1" class="Style3" onChange="affect_px(this)">
<option selected="selected"></option>
<option><?php echo $titre[0]; ?></option>
<option></option>
<option>----- Nouvelle Tendance (Bouteilles de 750 ml) -----</option>
<option value=5.00><?php echo $bouteille[1]; ?></option>
<option value=8.50><?php echo $bouteille[2]; ?></option>
<option value=12.30><?php echo $bouteille[3]; ?></option>
Etc …..


J’espère être clair dans mon explication.

Merci

Cireultra

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

16 juil. 2006, 19:47

Lorsque tu valides le formulaire, seul la valeur de l'attribut value de l'élément selectionné dans la liste est envoyé. Par défaut, si l'attribut n'est pas défini, par défaut, il utilise le libellé associé, d'où ton précédent comportement :)

Selon ce que tu veux faire, tu pourrais par exemple mettre toutes les informations dont tu as besoin dans le value (puisqu'il n'est pas visible pas l'utilisateur) et traiter la chaine récupérée ensuite..
Par contre si tu as besoin des valeurs de chaque ligne même si celles-ci ne sont pas selectionnées, il vaut mieux passer par des champs cachés..

cirultra
Invité n'ayant pas de compte PHPfrance

17 juil. 2006, 00:06

Merci pour ta réponse,

Si tu avais un petit exemple pour éclairer ma lanterne ce serais super.

A +

Cireultra

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 juil. 2006, 10:51

Ben tout dépend de ce que tu veux faire.. si tu gardes l'option "tout dans le value" il te suffit d'un truc du genre :
<option value="5.00|<?php echo $bouteille[1]; ?>"><?php echo $bouteille[1]; ?></option> 
Et quand tu récupère la valeur, il te suffit de faire un explode() sur le pipe "|" pour savoir que le premier élément sera la valeur et le second le libellé... :)

cirultra
Invité n'ayant pas de compte PHPfrance

17 juil. 2006, 12:59

Merci,

Je vais testé ta solution.

A +

Cireultra

cirultra
Invité n'ayant pas de compte PHPfrance

17 juil. 2006, 21:40

RE Merci

J'ai testé en php ta méthode ==> résultat moyen car mise en place délicate dans mon code. :?

Par contre la même chose en javascript (substring) fonctionne très bien, plus facile à mètre en place. :P

Je ne désespère pas de le faire fonctionner en PHP. :!:

A+

Cireultra

Mammouth du PHP | 19672 Messages

17 juil. 2006, 23:41

L'un n'empèche pas l'autre, une validation JavaScript présentant en outre l'avantage d'être plus rapide puisqu'exécutée coté client : si elle est bien faite, les données envoyées coté serveur arrivent déjà validées et le script PHP passe rapidement à la suite du traitement.

Pour info, il y a un tuto dans la FAQ sur la validation de formulaires complexes, jetes-y donc un coup d'oeil, tu y trouveras des informations sur la manière de récupérer des données en PHP.

Conseil : mets au point ta validation PHP avant la validation JavaScript, sinon, tu ne pourras pas tester ta validation PHP.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

cirultra
Invité n'ayant pas de compte PHPfrance

17 juil. 2006, 23:49

RE

Merci pour l'info et le lien.

A +

Cireultra

PS: Quand le formulaire sera fini et en ligne je vous donnerai le lien pour le tester.