[résolu] Comment récupérer nom + quantité dans liste déroulante

Comment récupérer nom + quantité dans liste déroulante [résolu] - PHP - Programmation

Marsh Posté le 26-09-2006 à 19:01:49    

Bonjour,
 
Je développe une page en php dans laquelle je liste des articles et je souhaite que l'utilisateur puisse choisir dans une liste déroulante la quantité d'un article donné (un article par ligne) .
 
Voici ce que j'ai pondu mais je n'obtiens pas le résultat escompté car si je récupère dans la page cible le bon code article ($id) la quantité n'est pas celle choisie par l'utilisateur. Voivi le code :
 
<form method="post" name="nom" action="marche_fait.php">
  <select name="achat">
   <option value="0"></option>&nbsp <!-- pour avoir 1ère ligne vide dans liste déroulante -->
   <?php
     FOR ($j = 1; $j <= 4; $j++)  
      {
       ECHO "<option name=\"$j\" value=\"$id\">";ECHO $j;ECHO"</option>";$_SESSION['nombre']=$j;
      }
   ?>
   <input type="submit" value="Acheter" />    
  </select></form>

 
 
 
$j est la quantité à commander (maxi 4) ; $id est l'id de l'article dans la table articles
 
Pour essayer d'être clair, j'affiche ceci :
Nom du produit / Prix / Liste déroulante pour la quantité / Bouton "Acheter".
 
J'arrive à récuperer l'id de l'article sans problème mais la quantité est toujours à 4, je comprends pourquoi mais je n'arrive pas à trouver la solution.
 
Merci de m'aider en php si possible mais s'il faut du javascript je suis preneur également.
 
MERCI d'avance pour toute piste / tuto / réponse même incomplète.


Message édité par AsmaTik le 27-09-2006 à 13:03:35
Reply

Marsh Posté le 26-09-2006 à 19:01:49   

Reply

Marsh Posté le 26-09-2006 à 19:59:46    

Euhhhh, et tu espères récupérer la quantité comment si elle n'est pas soumise dans le form ?
 
Parce que bon, là, ce que tu fais, c'est une boucle pour créer les options en leur donnant comme valeur l'id de ton article alors qu'elles sont supposées valoir la quantité.
 
(et ton $_SESSION sert à rien là, tu l'écrases à chaque passage dans la boucle, donc oui, il vaudra toujours 4. Mais ça représentera jamais le choix de l'utilisateur)

Reply

Marsh Posté le 26-09-2006 à 20:02:20    

Justement je pense qu'il doit se servir de sa variable de session et c'est pour cela qu'il doit toujours avoir le 4 pour la quantité


Message édité par arnaudm57 le 26-09-2006 à 20:03:29
Reply

Marsh Posté le 26-09-2006 à 22:47:35    

Merci naceroth et arnaudm57 pour vos réponses.
 
Petite précision : En fait j'encadre le bout de code plus haut pour lister l'ensemble de la table articles avec une boucle :
 
FOR ($i = 1; $i <= $nb_enregistrements; $i++)
 
J'ai compris que quand je récupère la quantité, la valeur de la boucle est à 4 quel que soit le choix de l'utilisateur, c'est là tout mon problème. Voyez-vous une façon de feire qui me permettrait de récupérer la bonne quantité en gardant une liste déroulante ?

Reply

Marsh Posté le 26-09-2006 à 22:52:42    

Comme le disait naceroth, dans ta liste déroulante, tu ferais mieux de mettre dans value, la valeur "$j" afin de pouvoir récupérer la bonne valeur de quantité
 
Par contre ton $id, tu le sélectionnes comment ? ou plutôt comment est affecté la variable ?
 
Tu peux toujours mettre l'id du produit dans une variable de session ou alors passer ça dans l'url ou même tout mettre dans un même formulaire. Les solutions sont nombreuses.


Message édité par arnaudm57 le 26-09-2006 à 22:54:33
Reply

Marsh Posté le 26-09-2006 à 23:41:01    

$id a la même valeur que i, ça me permet d'afficher la désignation correspondante après le :
    FOR ($i = 1; $i <= $nb_enregistrements; $i++)
puis le code avec le FORM m'affiche la liste déroulante en me permettant de récupérer mon $id qui me permet d'identifier l'article.
 
Par contre si j'envoie bien le bon code article par un POST, mon $_SESSION['nombre'] est forcément à la dernière valeur de la boucle $j donc à 4...

Reply

Marsh Posté le 27-09-2006 à 00:26:38    

AsmaTik a écrit :


puis le code avec le FORM m'affiche la liste déroulante en me permettant de récupérer mon $id qui me permet d'identifier l'article.


 
Oui mais ça c'est un non-sens, ta liste déroulante représante le choix de la quantité, y mettre la valeur permettant d'identifier l'article est absurde.
 
Maintenant, pour ce que je capte des morceaux du puzzle qu'est ton code, je déduis que tu affiches tous les articles avec un formulaire différent pour chacun, exact ?
 
Si oui, pourquoi n'utilises-tu pas simplement un <input type="hidden" name="id_article" value="ton_id_article" /> pour passer l'id d'une page à l'autre, et tu laisses ta liste déroulante faire ce qu'elle est supposée faire : renseigner la quantité.
 
:)
 
(PS : rien à voir mais je suis pas sûr du tout que tu comprennes bien l'utilité des sessions)

Reply

Marsh Posté le 27-09-2006 à 10:34:57    

Un élément "option" n'a pas d'attribut "name". Les attributs existant pour un élément "option" sont "selected", "disabled", "label" et "value".
D'un point de vue dialogue navigateur/Serveur, ca ne change strictement rien que tu mette un nom différent à chaque élément "option" tout simplement par ce que c'est une information qui ne sera jamais renvoyé par le navigateur. Le nom que le navigateur utilisera sera celui du "select" qui contient les éléments "option".
 
Du côté de ta seconde page, le choix de l'utilisateur sera dans $_POST['achat']. D'ailleur $_SESSION['nombre'] ne sert strictement à rien vu que la seule valeur qu'il peut contenir à la fin de l'exécution de la premiére page, c'est le dernier nombre que t'y a mis dedans. (donc 4) Vu que c'est un nombre fixé dans le code, il n'est pas trés utile de le mettre dans la session à moins de vouloir faire un controle du volume sélectionné par le client.

Reply

Marsh Posté le 27-09-2006 à 13:02:55    

J'ai suivi vos différents conseils et remarques, j'ai nettoyé mon code et j'ai remis la quantité dans $j, ai utilisé un champ hidden pour le code article (c'était ma 1ère idée mais je l'avais placé dans la boucle du $j donc ça ne marchait pas, en le sortant de la boucle, ça fonctionne).
 
Merci à arnaudm57, naceroth et omega2, vos contributions m'ont permis de trouver la solution !
 
P.S : pour les sessions, je sais m'en servir pour transmettre des variables sur plusieurs pages tant que la session est ouverte, par contre c'était clairement mal utilisé ici (j'ai essayé de bidouiller...)
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed