[PHP] - Formulaire pour des commandes
Résolu/Fermé
patrice86
Messages postés
1380
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
17 décembre 2024
-
9 juin 2012 à 16:25
patrice86 Messages postés 1380 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 17 décembre 2024 - 11 juin 2012 à 13:56
patrice86 Messages postés 1380 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 17 décembre 2024 - 11 juin 2012 à 13:56
A voir également:
- [PHP] - Formulaire pour des commandes
- Invite de commandes - Guide
- Formulaire de réclamation facebook - Guide
- Easy php - Télécharger - Divers Web & Internet
- Commandes terminal mac - Guide
- Formulaire de reclamation instagram - Guide
17 réponses
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
11 juin 2012 à 13:18
11 juin 2012 à 13:18
effectivement on peut très bien mettre une liste déroulante pour les produits.
- soit on "stocke" cette liste dans un array en JS qui servira à la fonction crea_champ a générer la lise déroulante
- soit on fait un appel Ajax pour la faire générer par du php
les deux sont possibles
quels sont les champs input que tu veux mettre pour chaque produit ?
je t'ai envoyé un MP
- soit on "stocke" cette liste dans un array en JS qui servira à la fonction crea_champ a générer la lise déroulante
- soit on fait un appel Ajax pour la faire générer par du php
les deux sont possibles
quels sont les champs input que tu veux mettre pour chaque produit ?
je t'ai envoyé un MP
aladin07
Messages postés
277
Date d'inscription
vendredi 13 avril 2012
Statut
Membre
Dernière intervention
30 septembre 2012
30
9 juin 2012 à 16:43
9 juin 2012 à 16:43
Pardonne moi mais la façon dont vous avez posé le problème est identique à celle d'appel aux propositions freelance....
En plus vous n'avez pas vraiment fournit les informations essentiels, tout ce que vous avez fournit n'est autre que des details secondaires.
Votre problème, est-il un problème HTML? Comment créer un formulaire? Comment PHP insere les donnés dans la bdd?
C'est quoi le problème exactement?
En plus vous n'avez pas vraiment fournit les informations essentiels, tout ce que vous avez fournit n'est autre que des details secondaires.
Votre problème, est-il un problème HTML? Comment créer un formulaire? Comment PHP insere les donnés dans la bdd?
C'est quoi le problème exactement?
patrice86
Messages postés
1380
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
17 décembre 2024
125
9 juin 2012 à 17:18
9 juin 2012 à 17:18
Le problème exactement consiste dans le fait que je ne vois pas comment créer ce genre de formulaire.
J'ai bien l'idée d'insérer une ligne à l'écran où l'utilisateur rentre le nombre de produit puis automatiquement sont générées des lignes avec les informations demandées mais derrière je n'arrive pas a récupérer les informations pour les stockées dans la bdd ou alors c'est très long (en code).
Donc ce que je recherche est une idée et/ou une solution pour résoudre ce problème.
J'ai bien l'idée d'insérer une ligne à l'écran où l'utilisateur rentre le nombre de produit puis automatiquement sont générées des lignes avec les informations demandées mais derrière je n'arrive pas a récupérer les informations pour les stockées dans la bdd ou alors c'est très long (en code).
Donc ce que je recherche est une idée et/ou une solution pour résoudre ce problème.
aladin07
Messages postés
277
Date d'inscription
vendredi 13 avril 2012
Statut
Membre
Dernière intervention
30 septembre 2012
30
9 juin 2012 à 17:39
9 juin 2012 à 17:39
Ce que j'aurais fait c'est:
1 - Ajouter un colonne dans commandes: personne_id qui contiendra le num_personne qui a fait la commande.
2 - Ajouter une colonne produits:(text) qui contiendra les num_pro
Alors dans le formulaire, afficher les produits (checkbox) pour chack produit checké il sera ajouté dans un text: ex: 12,335,775,31,14 ceci represente les produits séparés d'un virgule (pour les récupere on fait un explod();
le personne_id sert à reconnaitre la personne qui a fait cette commande.
Donc si on se connecte à la base, on retrouve les commandes, pour chaque commande on a la personne qui a fait la commande et les produits qu'elle a acheté
1 - Ajouter un colonne dans commandes: personne_id qui contiendra le num_personne qui a fait la commande.
2 - Ajouter une colonne produits:(text) qui contiendra les num_pro
Alors dans le formulaire, afficher les produits (checkbox) pour chack produit checké il sera ajouté dans un text: ex: 12,335,775,31,14 ceci represente les produits séparés d'un virgule (pour les récupere on fait un explod();
le personne_id sert à reconnaitre la personne qui a fait cette commande.
Donc si on se connecte à la base, on retrouve les commandes, pour chaque commande on a la personne qui a fait la commande et les produits qu'elle a acheté
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
patrice86
Messages postés
1380
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
17 décembre 2024
125
9 juin 2012 à 17:54
9 juin 2012 à 17:54
Le numéro de la personne se trouve déjà dans la table commande.
avec le MCD, on voit que ton idée n°2 n'est pas possible étant donné que la table concerner dispose du num de commande, du num produit et de la quantité.
Ex: commande, produit, qté => 1,1,2 1,2,1 1,3,5 ....
Hmmm l'idée de la Chekbox par contre n'est pas mauvaise du tout. Pas pratique par contre car je disposes de environ 70-80 produits =) mais c'est une solution que je vais étudier.
avec le MCD, on voit que ton idée n°2 n'est pas possible étant donné que la table concerner dispose du num de commande, du num produit et de la quantité.
Ex: commande, produit, qté => 1,1,2 1,2,1 1,3,5 ....
Hmmm l'idée de la Chekbox par contre n'est pas mauvaise du tout. Pas pratique par contre car je disposes de environ 70-80 produits =) mais c'est une solution que je vais étudier.
aladin07
Messages postés
277
Date d'inscription
vendredi 13 avril 2012
Statut
Membre
Dernière intervention
30 septembre 2012
30
9 juin 2012 à 18:57
9 juin 2012 à 18:57
La solution pour toi c'est bien le javascript...
https://getbootstrap.com/2.3.2/#typeahead
Tu vois ce type de champ? Essaie d'écrire Te, Pe, c'est comme facebook, en ecrivant le nom apparait, à chaque fois que tu tape sur entrer un hidden input collect l'id du produit.
Les termes seront collectés de la base de donnés pour le champ.
C'est la meilleur solution je crois.
https://getbootstrap.com/2.3.2/#typeahead
Tu vois ce type de champ? Essaie d'écrire Te, Pe, c'est comme facebook, en ecrivant le nom apparait, à chaque fois que tu tape sur entrer un hidden input collect l'id du produit.
Les termes seront collectés de la base de donnés pour le champ.
C'est la meilleur solution je crois.
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
Modifié par Alain_42 le 9/06/2012 à 22:54
Modifié par Alain_42 le 9/06/2012 à 22:54
une solution:
tu cree un formulaire avec un seul champ produit, avec un bouton ajouter un produit
ce bouton en javascript (vas voir sur google ) rajoutes un nouveau champ produit
attention il faut que le name soit un array ex
name="champ_produit[]
lorsque le formulaire est posté il suffit de parcourir l'array $_POST['champ_produit']
pour avoir tous les champs produit
coté enr BDD il faut que dans ta table produit tu aie un liaison vers la table commandes par un champ id_commande
ainsi lorsque formulaire posté tu fais un INSERT de la commande dans la table commande, tu récupères l'id autoincrémenté et tu fais par une boucle sur les produits des INSERT dans la table produits avec l'id_commande associé
ensuite pour relire il suffit de faire un SELECT sur la table produit avec WHERE id_commande= .....
plus d'autres champs d'autres tables pour avoir les renseignements voulus
tu cree un formulaire avec un seul champ produit, avec un bouton ajouter un produit
ce bouton en javascript (vas voir sur google ) rajoutes un nouveau champ produit
attention il faut que le name soit un array ex
name="champ_produit[]
lorsque le formulaire est posté il suffit de parcourir l'array $_POST['champ_produit']
pour avoir tous les champs produit
coté enr BDD il faut que dans ta table produit tu aie un liaison vers la table commandes par un champ id_commande
ainsi lorsque formulaire posté tu fais un INSERT de la commande dans la table commande, tu récupères l'id autoincrémenté et tu fais par une boucle sur les produits des INSERT dans la table produits avec l'id_commande associé
ensuite pour relire il suffit de faire un SELECT sur la table produit avec WHERE id_commande= .....
plus d'autres champs d'autres tables pour avoir les renseignements voulus
patrice86
Messages postés
1380
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
17 décembre 2024
125
10 juin 2012 à 11:16
10 juin 2012 à 11:16
je préfères l'idée de Alain_42.
Cependant, je ne sais pas comment le faire voila le problème et je dois l'avoir fini pour vendredi soir prochain ce problème....
Je comprends ton idée, j'étais parti sur ça à la base, mais c'est le fait de devoir récupérer les lignes une par une que je n'arrive pas à faire pour effectuer l'insertion dans la bdd. Je ne trouves pas la bonne boucle.
Cependant, je ne sais pas comment le faire voila le problème et je dois l'avoir fini pour vendredi soir prochain ce problème....
Je comprends ton idée, j'étais parti sur ça à la base, mais c'est le fait de devoir récupérer les lignes une par une que je n'arrive pas à faire pour effectuer l'insertion dans la bdd. Je ne trouves pas la bonne boucle.
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
10 juin 2012 à 15:28
10 juin 2012 à 15:28
qqqs détails complémentaires:
<?php if(isset($_POST['enregistrer'])){ //connexion BDD //enr dans table commandes $query="INSERT INTO commandes .................." $insert=mysql_query($query); if($insert){ $id_insert_cde=mysql_insert_id(); } //boucle sur les produits for($p=0:$p<sizeof($_POST['lib_produit']);$p++){ $lib_produit=mysql_real_escape_string($_POST['lib_produit'][$p]; $prix_produit=mysql_real_escape_string($_POST['prix_produit'][$p]; //etc... $query_p="INSERT INTO produits ........... $id_insert_cde .......$ref_produit....$qte_produit..."; } } ?> // par exemple si ton formulaire generé grace à JS est de cette forme produit 1 :<input type="texte" name="lib_produit[]" value="" /> <input type="texte" name="prix_produit[]" value="" /><br /> //ou tout autre champ produit 2 :<input type="texte" name="lib_produit[]" value="" /> <input type="texte" name="prix_produit[]" value="" /><br /> .... // OU produit 1 :<input type="texte" name="lib_produit[0]" value="" /> <input type="texte" name="prix_produit[0]" value="" /><br /> //ou tout autre champ produit 2 :<input type="texte" name="lib_produit[1]" value="" /> <input type="texte" name="prix_produit[1]" value="" /><br /> <input type="submit" name="enregistrer" value="Enregistrer" />
patrice86
Messages postés
1380
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
17 décembre 2024
125
10 juin 2012 à 16:13
10 juin 2012 à 16:13
J'ai trouvé une solution pour le formulaire.
J'utilise AJAX pour éxécuter un fichier .php qui affiche une ligne.
A chaque fois que je clique sur un bouton, une ligne apparait.
Or problème, la 1ére apparait bien en dessous mais après les autres lignes apparaissent l'une a côté de l'autre (pas pratique du tout !)
donc comment faire un saut de ligne dans mon js ?
Voici la ligne qui pose problème
J'utilise AJAX pour éxécuter un fichier .php qui affiche une ligne.
A chaque fois que je clique sur un bouton, une ligne apparait.
Or problème, la 1ére apparait bien en dessous mais après les autres lignes apparaissent l'une a côté de l'autre (pas pratique du tout !)
donc comment faire un saut de ligne dans mon js ?
Voici la ligne qui pose problème
document.getElementById('ajout').innerHTML += ajax.responseText;
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
10 juin 2012 à 16:55
10 juin 2012 à 16:55
pourquoi Ajax ?
Ajax permet d'aller chercher des infos sur le serveur, ce n'est pas nécessaire dans ton cas, ce ne sont que des codes html d' input
ci joint un exemple d'ajout de champ avec JS, ce code a juste un pb avec la partie suppression d'une ligne si on clique sur une croix autre que la dernière ligne (tu supprimes cette fonctionalité ??):
Ajax permet d'aller chercher des infos sur le serveur, ce n'est pas nécessaire dans ton cas, ce ne sont que des codes html d' input
ci joint un exemple d'ajout de champ avec JS, ce code a juste un pb avec la partie suppression d'une ligne si on clique sur une croix autre que la dernière ligne (tu supprimes cette fonctionalité ??):
<html> <head> <title>Document sans nom</title> <script language="javascript"> <!-- function create_champ(i){ var i2 = i + 1; document.getElementById('input_'+i).innerHTML = '<div id="champs_'+i+'"><tr><td>Période.'+i+'</td><td><input type="text" name="in['+i+']" id="in_'+i+'" maxlength="12" onClick="javacript:transpo('+i+')" /></td><td><input name="out['+i+']" id="out_'+i+'" type="text" maxlength="12"/></td><td><input name="prix['+i+']" id="prix_'+i+'" type="text"/></td><td><input type="button" value="X" onClick="javascript:supr_champ('+i+')"></td></tr></div>'; document.getElementById('input_'+i).innerHTML += (i <= 100) ? '<span id="input_'+i2+'"><input class="input2" type="button" onClick="javascript:create_champ('+i2+')" value="Ajouter une période"></span>' : ''; document.getElementById('in_'+i).value = document.getElementById('out_'+(i-1)).value; document.getElementById('nombre').value = i; } function supr_champ(i){ var Parent; var Obj = document.getElementById ( 'input_'+i) ; if( Obj) Parent = Obj.parentNode; if( Parent) Parent.removeChild( Obj); } function transpo(i) { document.getElementById('in_'+i).value = document.getElementById('out_'+(i-1)).value; } --> </script> </head> <body> <form name="palala"> <table width="400"> <tr> <th width="20%">Période</th> <th width="20%">Date de début</th> <th width="20%">Date de fin</th> <th width="20%">Prix</th> <th width="20%">Effacer</th> </tr> <tr> <td>Période.1</td> <td><input type="text" name="in[1]" id="in_1" maxlength="12" value="" /></td> <td><input type="text" name="out[1]" id="out_1" maxlength="12" value="" /></td> <td><input type="text" name="prix[1]" id="prix_1" maxlength="12" value="" / ></td> <td>-</td> </tr> <div id="champs_1"></div> <tr> <td colspan="5"><span id="input_2"><input name="button" type="button" class="input2" onClick="javascript:create_champ(2)" value="Ajouter une période"></span></td> </tr> </table> Nombre de champs : <input name="nombre" id="nombre" type="text" value="1" disabled size="3"> </form> </body> </html>
patrice86
Messages postés
1380
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
17 décembre 2024
125
Modifié par patrice86 le 10/06/2012 à 17:01
Modifié par patrice86 le 10/06/2012 à 17:01
Ajax fonctionne parfaitement et je le comprends.
Je viens d'essayer de comprendre ton code mais trop 'lourd' si je puis dire. Je dois le présenter devant un jury, si je ne le maîtrise pas, je suis coincé.... :/
Avec ma fonction ajax, j'appel un fichier .php qui affiche mes lignes, après j'ai un soucis c'est que je n'arrives pas à les insérer l'une à côté de l'autre
Voir question ici: https://forums.commentcamarche.net/forum/affich-25353442-js-saut-de-ligne-impossible#p25353442
Ensuite, faudra que j'arrives à récupérer les valeurs une par une pour les insérer dans la table de la bdd (quel galère le web, vive le java)
Merci pour ton aide Alain ! mais malheureusement j'ai déjà trouvée un bout de solution =)
Je viens d'essayer de comprendre ton code mais trop 'lourd' si je puis dire. Je dois le présenter devant un jury, si je ne le maîtrise pas, je suis coincé.... :/
Avec ma fonction ajax, j'appel un fichier .php qui affiche mes lignes, après j'ai un soucis c'est que je n'arrives pas à les insérer l'une à côté de l'autre
Voir question ici: https://forums.commentcamarche.net/forum/affich-25353442-js-saut-de-ligne-impossible#p25353442
Ensuite, faudra que j'arrives à récupérer les valeurs une par une pour les insérer dans la table de la bdd (quel galère le web, vive le java)
Merci pour ton aide Alain ! mais malheureusement j'ai déjà trouvée un bout de solution =)
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
10 juin 2012 à 17:39
10 juin 2012 à 17:39
je ne suis toujours pas convaincu de l'utilité d'Ajax
mais bon essayes avec:
et quel est le code des input retournés par ajax ?
mais bon essayes avec:
document.getElementById('ajout').value += '<br />'+ajax.responseText;
et quel est le code des input retournés par ajax ?
patrice86
Messages postés
1380
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
17 décembre 2024
125
10 juin 2012 à 17:43
10 juin 2012 à 17:43
Avec value, ça ne fonctionne pas. Je ne comprend pas pk
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
Modifié par Alain_42 le 10/06/2012 à 18:37
Modifié par Alain_42 le 10/06/2012 à 18:37
tiens je t'ai fait qq chose de plus simple, avec des commentaires, avec ça tu dois pouvoir donner toutes explications à ton jury, si besoin je peux te donner + d'infos:
pour plus d'infos sur JS et les table HTML vas voir cette page:
http://www.siteduzero.com/tutoriel-3-209615-maitriser-les-tableaux-html-avec-javascript.html
pour plus d'infos sur JS et les table HTML vas voir cette page:
http://www.siteduzero.com/tutoriel-3-209615-maitriser-les-tableaux-html-avec-javascript.html
<html> <head> <title>Insertion de lignes en JS</title> <script type="text/javascript"> <!-- //init variable JS globale, elle conserve sa valeur entre chaque appel de la fonction //c a d après le premier appel elle va passer à 1 etc... i=0; function create_champ(){ //on increment la variable globale i, numero de produit i++; // en JS on peut atteindre les elements de la page HTML par document.getElementById // creation de l'objet tableau avec lequeml on va travailler var obj_tableau=document.getElementById("tableau_produits"); //lecture des lignes du tableau actuel, JS le met dans un array var arrayLignes = obj_tableau.rows; //pour avoir le nombre de lignes, avec .length on a la taille de l'array var nbr_de_lignes=arrayLignes.length; //on insere une nouvelle ligne de tableau juste avant celle contenant le bouton var nouvelleLigne = obj_tableau.insertRow(nbr_de_lignes-1); //ensuite on remplit chacune des cellules <td></td> du tableau avec les input var colonne1=nouvelleLigne.insertCell(0); colonne1.innerHTML="Produit "+i; var colonne2=nouvelleLigne.insertCell(1); colonne2.innerHTML='<input type="text" name="lib_produit['+i+']" value="" />'; var colonne3=nouvelleLigne.insertCell(2); colonne3.innerHTML='<input type="text" name="qte_produit['+i+']" value="" />'; var colonne4=nouvelleLigne.insertCell(3); colonne4.innerHTML='<input type="text" name="prix_produit['+i+']" value="" />'; //tu peux rajouter des colonnes, modifier le name, mais garde sa forme name="lib_produit['+i+']" //ainsi tu pourra facilement récuper par $_POST['lib_produit'] qui est un array, donc boucler pour insertiondans BDD } --> </script> </head> <body onload="javascript:create_champ();"> <!-- au chargement de la page on ajoute la premiere ligne produit --> <form name="form_ajaout_cde" method="post" action="" > <table width="800" id="tableau_produits" > <tr> <th>Produit</th> <th>Libelle</th> <th>Quantité</th> <th>Prix</th> </tr> <tr> <td colspan="4"> <input name="button" type="button" class="input2" onClick="javascript:create_champ()" value="Ajouter une ligne produit"> </td> </tr> </table> </form> </body> </html>
patrice86
Messages postés
1380
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
17 décembre 2024
125
Modifié par patrice86 le 11/06/2012 à 11:56
Modifié par patrice86 le 11/06/2012 à 11:56
beaucoup plus clair et j'ai compris =)
De plus, cela fonctionne très bien.
Seulement, a la place d'un input pour le libelle, il faudrait que j'ai une liste déroulante avec tout les produits. j'ai créer ceci dans un fichier .php, mais comment faire pour l'appeler lors de la création des lignes à la place du input ?
j'ai bien penser à faire une fonction en AJAX qui appelle le fichier puis d'appeler cette fonction dans ton code, mais ça ne fonctionne pas.
De plus, cela fonctionne très bien.
Seulement, a la place d'un input pour le libelle, il faudrait que j'ai une liste déroulante avec tout les produits. j'ai créer ceci dans un fichier .php, mais comment faire pour l'appeler lors de la création des lignes à la place du input ?
j'ai bien penser à faire une fonction en AJAX qui appelle le fichier puis d'appeler cette fonction dans ton code, mais ça ne fonctionne pas.
patrice86
Messages postés
1380
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
17 décembre 2024
125
11 juin 2012 à 13:56
11 juin 2012 à 13:56
Travail en MP et e-mail.
Je t'es envoyé les infos par message privé.
Je t'es envoyé les infos par message privé.