Champs input vers Array PHP

Champs input vers Array PHP - PHP - Programmation

Marsh Posté le 05-11-2013 à 17:10:41    

Bonjour à tous
 
J'ai une question à propos des tableaux en PHP et de leurs interactions avec des éléments de formulaire en HTML.
 
Je souhaiterai, à partir de plusieurs éléments de formulaire (input type="text", input type="checkbox" ) remplir un ou plusieurs tableaux (array) PHP dans le but d'obtenir à la fin une variable qui contient  
 
x (qte de produit) produits A
y produits B
z produits C
 
Pour cela, voici mon code HTML
 

Code :
  1. <input type="text" name="QteMateriel[]" size="3"><input type="checkbox" name="Materiel[]" id="1" value="Produit A" /> Produit A <br />
  2. <input type="text" name="QteMateriel[]" size="3"><input type="checkbox" name="Materiel[]" id="2" value="Produit B" /> Produit B <br />
  3. <input type="text" name="QteMateriel[]" size="3"><input type="checkbox" name="Materiel[]" id="3" value="Produit C" /> Produit C <br />


 
Et le résultat :
 
http://img11.hostingpics.net/thumbs/mini_641344Capturehtml1.png
 
 
Et mon code PHP pour la récupération des données dans le formulaire
 
 

Code :
  1. foreach($_POST['QteMateriel'] as $value )
  2.     {
  3.        echo $value;
  4.     }
  5. foreach($_POST['Materiel'] as $value )
  6.    {
  7.       echo $value . '<br />';
  8.    }


 
 
Dans mon formulaire, je rentre :
 

  • Dans le textbox du produit A la valeur 1 (et je coche la case)
  • Dans le textbox du produit B la valeur 2 (et je coche la case)


Mais le résultat escompté n'est pas la, j'obtiens :
 
12Produit A
Produit B
 
 
D'ou pourrait venir l'erreur ?  
 
Merci beaucoup à tous  :bounce:  

Reply

Marsh Posté le 05-11-2013 à 17:10:41   

Reply

Marsh Posté le 05-11-2013 à 17:19:38    

T'as pas mis <br /> après le $value dans ta première boucle ;)
 


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 05-11-2013 à 18:37:43    

Cela ne changera pas grand chose, le résultat obtenu est celui attendu. Ce que tu voudrais c'est que ça t'affiche la Qté1 puis le produit1 puis Qté2 puis produit2 etc.
Là tu demandes avec tes boucles d'afficher :
Boucle 1 : Qté1 puis Qté2 etc.
PUIS
Boucle 2 : produit1 puis produit2 etc.
 
Il faut que tu fasses une seule boucle qui affiche à chaque pas Qtéx puis Produitx.
 
 
 
Mais bon ça ne marchera toujours pas dans le cas où l'utilisateur mets une qté dans la première case, coche "produit A" puis mets une quantité dans la deuxième case et coche "produit C". En effet tu ne lies pas tes champs.

Reply

Marsh Posté le 05-11-2013 à 22:32:54    

rufo a écrit :

T'as pas mis <br /> après le $value dans ta première boucle ;)
 


 
Merci pour ton aide, je n'avais pas vu cette petite coquille :)
 

MaybeEijOrNot a écrit :

Cela ne changera pas grand chose, le résultat obtenu est celui attendu. Ce que tu voudrais c'est que ça t'affiche la Qté1 puis le produit1 puis Qté2 puis produit2 etc.
Là tu demandes avec tes boucles d'afficher :
Boucle 1 : Qté1 puis Qté2 etc.
PUIS
Boucle 2 : produit1 puis produit2 etc.
 
Il faut que tu fasses une seule boucle qui affiche à chaque pas Qtéx puis Produitx.
 
 
 
Mais bon ça ne marchera toujours pas dans le cas où l'utilisateur mets une qté dans la première case, coche "produit A" puis mets une quantité dans la deuxième case et coche "produit C". En effet tu ne lies pas tes champs.


 
Merci pour tes observations et tu as devancé ma prochaine question toujours en rapport avec les quelques lignes de scripts ci-dessus. J'ai remarqué exactement les mêmes symptômes en cas de saisie incorrecte (volontaire ou non), c'est à dire des décalages entres les quantités et les noms de produits SI le formulaire est mal renseigné.
 
Pourrais-tu me dire dans les grandes lignes que faut t'il faire pour résoudre ce problème ? Ou mieux de la documentation (toujours mieux pour apprendre et comprendre nos erreurs)  
 
D'avance, merci à tous :)

Message cité 1 fois
Message édité par mftech le 05-11-2013 à 22:33:24
Reply

Marsh Posté le 06-11-2013 à 09:25:14    

Pour rappel,  une case à cocher non cochée n'est pas envoyée au serveur, contrairement à un input type "text" qui serait vide...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 06-11-2013 à 10:15:26    

Tu pourrais faire (à tester, je n'ai jamais essayé) :
 

Code :
  1. <input type="text" name="Materiel[0][]" size="3"><input type="checkbox" name="Materiel[0][]" id="1" value="Produit A" /> Produit A <br />
  2.     <input type="text" name="Materiel[1][]" size="3"><input type="checkbox" name="Materiel[1][]" id="2" value="Produit B" /> Produit B <br />
  3.     <input type="text" name="Materiel[2][]" size="3"><input type="checkbox" name="Materiel[2][]" id="3" value="Produit C" /> Produit C <br />


 
Après dans le php tu vérifies si pour chaque dimension de premier ordre il existe 2 valeurs.

Reply

Marsh Posté le 06-11-2013 à 15:57:53    

mftech a écrit :


 
Merci pour tes observations et tu as devancé ma prochaine question toujours en rapport avec les quelques lignes de scripts ci-dessus. J'ai remarqué exactement les mêmes symptômes en cas de saisie incorrecte (volontaire ou non), c'est à dire des décalages entres les quantités et les noms de produits SI le formulaire est mal renseigné.


 
Il faut, à ce moment là, faire des contrôles de champs (si le champs a des lettres au lieu de chiffres, pas bon, si le champs est vide, etc)
 

mftech a écrit :


Pourrais-tu me dire dans les grandes lignes que faut t'il faire pour résoudre ce problème ? Ou mieux de la documentation (toujours mieux pour apprendre et comprendre nos erreurs)  
 
D'avance, merci à tous :)


 
Juste une idée Pourquoi ne pas mettre une liste déroulante de 0 à X chiffres. Si il y a 0 tu ne le prends pas en compte sinon tu le comptabilises !
 


---------------
Topic Ach/Vds/Ech jeux vidéo
Reply

Marsh Posté le 17-01-2014 à 17:35:00    

J'ai une idée qui est proche de la version initiale, ce n'est pas génial mais ça répond à la question :)
n'oublies pas des tests existants des variable, ainsi que leur valeurs.  
 

Code :
  1. <?php
  2. if (isset($_POST) && isset($_POST['Materiel'])){
  3. foreach($_POST['Materiel'] as $name1 => $value_checkbox){
  4.  $output = '';
  5.  $name_input = "QteMateriel".$value_checkbox;
  6.  $name_hidden = "hiddenMateriel".$value_checkbox;
  7.  foreach($_POST as $name2 => $value_input){
  8.   if ($name2 == $name_input && $value_input != ''){
  9.    $output = $value_input. " ".$_POST[$name_hidden];
  10.   }
  11.  }
  12.  echo $output."<br/>";
  13. }
  14. }
  15. else{
  16. ?>
  17. <form method="post">
  18. <input type="text" name="QteMaterielA" size="3">
  19. <input type="checkbox" name="Materiel[]" id="1" value="A" /> Produit A <br />
  20. <input type="hidden" name="hiddenMaterielA" value="Produit A"/>
  21. <input type="text" name="QteMaterielB" size="3">
  22. <input type="checkbox" name="Materiel[]" id="1" value="B" /> Produit B <br />
  23. <input type="hidden" name="hiddenMaterielB" value="Produit B"/>
  24. <button type="submit">Submit</button>
  25. </form>
  26. <?php
  27. }?>

Reply

Sujets relatifs:

Leave a Replay

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