Transmettre données ligne tableau

Transmettre données ligne tableau - PHP - Programmation

Marsh Posté le 05-04-2019 à 12:48:26    

Bonjour,
 
Désolé pour mon titre qui n'est pas très clair.
Je suis en cours d'apprentissage donc désolé si je ne suis pas au point. Je travaille sur une structure MVC avec le moteur de template Smarty et un template admin fournie. Bref, cela n'a vas pas changer grand chose à l'histoire.
Ceci est une étape d'un projet que je dois mener seulement en PHP (pas de JS, ni d'Ajax).
 
J'ai déjà fait une partie liste et fiche (pour les produits et les clients) avec une modification possible directement dans la fiche d'un client ou d'un produit (sans tableau).
Ici, la modification doit se faire dans la page qui liste.
 
Via une requête SQL, je remplie un tableau où chaque ligne (divisé en TD pour chaque donnée) affiche un "numéro de ligne", "reference", "désignation", "quantité", "prix" et au bout de la ligne un bouton "modifier".  
Pour ça, pas de soucis. Je laisse "quantité" en input de type text pour pouvoir le modifier.
 
Mon problème : d'habitude, j'utilise un <form> qui récupère les données que j'envois en method=POST.
Ici, via des input de type hidden, je peux transmettre toutes les données dont j'ai besoin SAUF la quantité saisie.
En effet, elle ne se trouve pas dans le même TD.
 
Quelqu'un peut-il m'éclairer sur la méthode à utiliser ?
 
Merci d'avance de votre aide.

Message cité 1 fois
Message édité par Coconet le 05-04-2019 à 12:50:03
Reply

Marsh Posté le 05-04-2019 à 12:48:26   

Reply

Marsh Posté le 05-04-2019 à 13:44:17    

Coconet a écrit :

En effet, elle ne se trouve pas dans le même TD.


 
Bonjour,
 
Tu veux dire pas dans le même "form", sinon je ne vois pas le problème... Si c'est bien ça, pourquoi il ne peut pas être dans le même "form" ?


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 05-04-2019 à 14:04:32    

Non, je veux bien dire dans le même TD. Un form ne peut pas englober plusieurs TD.
Quelque chose doit m'échapper !
 
En gros j'ai besoin de ça (exemple avec 2 lignes) :  

Code :
  1. <table>
  2.   <tr>
  3.        <form>
  4.              <td></td>
  5.              <td></td>
  6.        </form>
  7.   </tr>
  8.   <tr>
  9.        <form>
  10.              <td></td>
  11.              <td></td>
  12.        </form>
  13.   </tr>
  14. </table>


Mais ça, c'est impossible non ?


---------------
Mon FeedBack - Mon Topic de ventes
Reply

Marsh Posté le 05-04-2019 à 15:10:52    

Bien sur que c'est possible tu peut même mettre un form autour de chaque input si ça t'amuses...
Mais dans le cadre de ton exercice, il est possible que ton instructeur attendes de toi que tu sache nommer tes inputs, par exemple : <input type=text" name="qte[32]" value"7" /> et $_POST['qte']['32'] = 7;
Après y'a des limites faut pas non plus envoyer 10 000 valeur en POST quand une seul change ! ^^


---------------
D3
Reply

Marsh Posté le 05-04-2019 à 15:41:02    

Effectivement, je nomme mes inputs car je les récupère dans un tableau $_POST ensuite.
Je comprends bien ce que tu me dis, merci pour ton aide d'ailleurs, mais mon IDE ne veut pas de mon form comme je le positionne et effectivement, il ne remonte rien.
Voici une partie de mon code dans mon fichier tpl, c'est une partie du tbody et j'utilise du "langage" smarty :

Code :
  1. <tbody>
  2.                                 {foreach from=$listerCommandes item=commande}
  3.                                     <tr>
  4.                                 <form method="POST" action="index.php">
  5.                                     <input type="hidden" name="gestion" value="commande">
  6.                                     <input type="hidden" name="action" value="maj_quantite">
  7.                                     <input type="hidden" name="f_date_livraison" value="{$date_liv}">
  8.                                     <input type="hidden" name="f_num_ligne" value="{$commande.numero_cmd}">
  9.                                     <input type="hidden" name="f_numero" value="{$commande.reference}">
  10.                                     <td>{$commande.numero_cmd}</td>
  11.                                     <td>{$commande.reference}</td>
  12.                                     <td>{$commande.designation}</td>
  13.                                     <td>
  14.                                         {if $action != 'form_modifier'}
  15.                                             {$commande.quantite}
  16.                                         {elseif  $action == 'form_modifier'}
  17.                                             <input type="text" name="f_quantite" value="{$commande.quantite}" size="3">
  18.                                         {/if}
  19.                                     </td>
  20.                                     <td>{$commande.prix}</td>
  21.                                     {if $action == 'form_modifier'}
  22.                                         <td class="pos-actions"><input id="mImage" type="image" name="btn_modifier" src="template/images/icones/m16.png" value="maj_quantite"></td>
  23.                                     {/if}
  24.                                  </form>
  25.                                
  26.                                 </tr>
  27.                             {/foreach}
  28. .......


Message édité par Coconet le 05-04-2019 à 15:41:27
Reply

Marsh Posté le 05-04-2019 à 15:45:00    

Ton <form> doit contenir tout le tableau. Donc, les inputs de type text contenant les quantités seront envoyés au serveur. Ca n'a rien à voir avec les td.
<form>
<table>
contenu du tableau avec tous les champs
</table>
Le bouton input type submit pour poster ton formulaire
</form>  
 
Edit : je ne vois vraiment pas l'intérêt dasn le cas présent de faire plusieurs <form> :??: Une seul suffit.

Message cité 1 fois
Message édité par rufo le 05-04-2019 à 15:46:26

---------------
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-04-2019 à 16:17:32    

rufo a écrit :

Ton <form> doit contenir tout le tableau. Donc, les inputs de type text contenant les quantités seront envoyés au serveur. Ca n'a rien à voir avec les td.
<form>
<table>
contenu du tableau avec tous les champs
</table>
Le bouton input type submit pour poster ton formulaire
</form>  
 
Edit : je ne vois vraiment pas l'intérêt dasn le cas présent de faire plusieurs <form> :??: Une seul suffit.


Effectivement, je n'ai qu'un seul form, je ne comprends pas pourquoi tu me dis ça.
Le problème c'est que mon form est dans le tableau, et pas l'inverse. Mon tableau comporte pleins de ligne et j'ai besoin d'un form par ligne.
 
Bon, je sais pourquoi ça ne fonctionne pas : "A form is not allowed to be a child element of a table, tbody or tr."


---------------
Mon FeedBack - Mon Topic de ventes
Reply

Marsh Posté le 05-04-2019 à 16:22:33    

Comme je te le disais tout a l'heure tu peux  avoir un form global au dessus de ta table et  

Code :
  1. <input type="text" name="f_quantite[{$commande.numero_cmd}]" value="{$commande.quantite}" size="3">


De cette facon tu aura un tableau f_quantite avec en clef ton num_cmd et en valeur ta quantité.
Le soucis c'est que tu soumets tout le tableau à chaque changement d'une seule valeur...
 
Du coups si tu n'as pas le droit à l'ajax, je me demandes si la solution ce n'est pas de mettre un form par td  :o


---------------
D3
Reply

Marsh Posté le 05-04-2019 à 16:37:26    

D'après ta demande, et le code que tu fournies, tu as juste à mettre le form ainsi que les input cachés dans le td avec la quantité :

Code :
  1. {elseif  $action == 'form_modifier'}
  2.    <input type="text" name="f_quantite" value="{$commande.quantite}" size="3">
  3. {/if}


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 05-04-2019 à 16:51:41    

Coconet a écrit :


Effectivement, je n'ai qu'un seul form, je ne comprends pas pourquoi tu me dis ça.
Le problème c'est que mon form est dans le tableau, et pas l'inverse. Mon tableau comporte pleins de ligne et j'ai besoin d'un form par ligne.
 
Bon, je sais pourquoi ça ne fonctionne pas : "A form is not allowed to be a child element of a table, tbody or tr."


Non, à aucun moment tu n'as besoin d'avoir plusieurs <form> dans ton tableau :o Un seul suffit. A toi de nommer les inputs avec des id afin de repérer ceux qui correspondent à un produit en particulier. Ainsi, dans ton $_POST, tu vas récupérer pleins de inputs avec des valeurs. En analysant le contenu des "name", tu sauras à quel produit associer tel ou tel valeur de input ;)


---------------
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

Sujets relatifs:

Leave a Replay

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