|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Benoit En recherche de poste Web Inscription : août 2010 Messages : 189 ![]() |
Bonjour à tous,
Après la lecture du doc de Guillaume Rossolini, je me heurte à un problème de construction de formulaire. En simplifiant très fortement, disons que ma base de données recueille des informations sur des humains. Chaque humain à la possibilité de rentrer des infos sur ses enfants. Du coup, concrètement, j'ai un formulaire contenant diverses balises pour recueillir le non, prénom, date de naissance, ville etc.... En dessous, j'aimerais faire en sorte qu'on puisse entrer le prénom et ladate de naissance des enfants. Mais comment prévoir si un adulte à 0,1 ou 36 enfants ? Je ne peux quand même pas mettre 20(30,40...) input(s) pour répondre à toutes les possibilités. Je me suis tourné vers une nouvelle fenetre qui permet d'enregistrer les enfants un à un en fonction de l'id de l'individu de la fenêtre principale (grace à des $_SESSION['id_users']. Mais cela ne me plait pas. Avant je faisais tout cela sous ACCESS, et il n'y avait pas de problème mais en Php_Html_MySql, je ne sais pas...... Auriez-vous une super idée pour me dépanner. Merci à tous et surtout bonnes fêtes. |
|
|
00
|
|
|
#2 |
![]() ![]() Développeur PHP, .Net, T-SQL Inscription : décembre 2006 Messages : 2 354 ![]() |
Salut,
Tu pourrais toujours le faire en deux temps : - Dans un premier tu recueille le nombre d'enfants N - ensuite tu produits un formulaire contentant N inputs.
__________________
Développeur | Zend Certified Engineer Étapes Pour mieux se servir du forum: 1. Commencez par lire les cours et tutoriels ; 2. Faites une recherche; 3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles; Nix>_Rien n'est plus pratique que la théorie |
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() Benoit En recherche de poste Web Inscription : août 2010 Messages : 189 ![]() |
SAlut Thes32,
Effectivement, je n'y avais pas pensé. J'avais aussi envisagé de faire un bouton avec une fonction JavaScript, qui me créerait des "Frères aux inputs". Mais je ne sais pas si c'est vraiment possible. Et puis il y a toujours le risque (classique) que l'internaute n'ait pas activé Javascript. Du coup ta solution est intéressante |
|
|
00
|
|
|
#4 | |
|
Expert Confirmé
![]() ![]() Alain Inscription : septembre 2010 Messages : 1 917 ![]() |
Citation:
Evidemment le plus complet serait d'implémenter les deux méthodes (ajout javascript et php si javascript désactivé) mais ça demande plus de boulot. Maintenant sauf pour ce qui touche à la sécurité je ne double plus mes scripts car tout le monde a javascript activé par défaut (sinon y'a même plus un site sur deux qui fonctionne correctement...) Donc c'est à voir avec ton cahier des charges.
__________________
- Réalisations - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical. |
|
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() Benoit En recherche de poste Web Inscription : août 2010 Messages : 189 ![]() |
Salut et merci à tous les deux...
Maintenant, une autre question se pose : Lors du "submit" de mon formulaire, je vais me retrouver avec des $_POST[enfant1], $_POST[enfant2], $_POST[enfant3] etc.... évidemment avec les autres champs associés. Du coup, lors de l'appel de ma classe d'insertion, comment faire pour qu'il y ait x insertions distinctes. J'imagine une boucle for quelconque. Mais comment déterminer ce nombre ? Toujours grace à JS qui récupère le nombre de "frères" et passe ce résultat à la classique variable $i de la boucle ? PArce que j'avoue là je seche et je ne sais pas comment construire cette classe. |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Étudiant Inscription : avril 2012 Messages : 609 ![]() |
Bonsoir,
tu devrait faire en sorte que ton formulaire t'envoi un tableau d'enfant : Code :
<input type="text" name="enfant[nb][]" id="input" /> Code :
<input type="text" name="enfant[][]" id="input" /> où nb est à remplasser par un nombre que tu générera en JS, ensuite dans ton script php qui récupère ton tableau et tu le traite avec la fonction foreach() |
|
|
00
|
|
|
#7 | ||
|
Expert Confirmé
![]() ![]() Alain Inscription : septembre 2010 Messages : 1 917 ![]() |
Encore plus simple :
Code :
<input class="enfant" type="text" name="enfant[]" /> Code :
__________________
- Réalisations - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical. |
||
|
|
00
|
|
|
#8 | ||
|
Membre Expert
![]() Étudiant Inscription : avril 2012 Messages : 609 ![]() |
Bonjour,
une petite chose c'est qu'un enfant aura plusieurs informations (nom, prenom, ...), je pense qu'il sera alors obligé de passer par une syntaxe du type : Code html :
et pour chaque enfant il devra augmenter la valeur de nb de 1 pour que chaque index du tableau contienne un tableau qui contiendra les information d'un enfant. |
||
|
|
00
|
|
|
#9 | ||||||
|
Membre habitué
![]() Benoit En recherche de poste Web Inscription : août 2010 Messages : 189 ![]() |
Bonjour à tous les deux,
@eixia93 : Pendant que tu envoyais ton post je me suis fais ceci Formulaire HTML : Code :
Code :
Code :
Comment arranger les idées d'ABCIWEB pour enlever les blancs et les lignes nulles? |
||||||
|
|
00
|
|
|
#10 | ||
|
Expert Confirmé
![]() ![]() Alain Inscription : septembre 2010 Messages : 1 917 ![]() |
Puisque c'est noël, un exemple de code générique :
Code :
Code :
<label>ville de naissance<input type="text" name="enfant[ville_naissance][]" class="enfant" /></label>
__________________
- Réalisations - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical. |
||
|
|
00
|
|
|
#11 |
|
Membre habitué
![]() Benoit En recherche de poste Web Inscription : août 2010 Messages : 189 ![]() |
Merci papa noël
![]() ![]() Désolé de n'avoir pas répondu hier, mais j'étais kidnappé par mon foie.... J'ai commencé à étudier ton script, et effectivement, il est plus intéressant que le mien. Merci. Je vais finir de le regarder de plus près... Je te tiens au courant. Si tout ce passe bien je rajoute un RESOLU |
|
|
00
|
|
|
#12 |
|
Nouveau Membre du Club
![]() Inscription : janvier 2007 Messages : 165 ![]() |
Bonjour
je me posais la question de savoir, au lieu d'attendre la fin de la saisie de l'ensemble des enfants pourquoi ne pas créer des boutons d"ajout et suppression, de ce fait lorsque tu créer un ligne d'enfant, en creant une nouvelle ligne tu enregistre la ligne précédente, et lorsque tu as fait une erreur en ajoutant trop d'enfant , tu peux sélectionner la ligne et supprimer dans la méme fenêtre. lorsque de l'enregistrement de chaque ligne d'enfant, ID tu pere est enregistrée en clé secondaire. de ce fait tu valide d'abord la fenêtre de sous-formulaire enfant avant de valider les informations du père. si j'ai tiré à coter alors excuses moi. bonne chance. |
|
|
00
|
|
|
#13 |
|
Membre habitué
![]() Benoit En recherche de poste Web Inscription : août 2010 Messages : 189 ![]() |
Salut kitcarson23 et bonne années à tous,
En fait, ta méthode est envisageable mais il faudrait revoir le tout. On peut tout à fait renvoyer une requête AJAX à chaque création de ligne pour enregistrer la ligne précedente. Il faut aussi ajouter un bouton pour l'enregistrement de la dernière ligne. Cela veut aussi dire que les informations liés au parent est déjà entré dans la base puisqu'il faut avoir son ID. Et puis, il s'agit ici d'une table de liaison issu d'une relation récursive avec des cardinalité n,n. Je n'ai pas une table parents et une table enfants, mais une seule table individus, qui peuvent avoir des enfants ou être enfants d'individus de la base. Quoiqu'il en soit ta solution est envisageable. Enfin, je ne vois pas où il pourrait y avoir des problèmes. Le tout serait de savoir s'il y a une différence de performance entre les deux méthodes... Je garde ton idée dans un creux de ma tête, histoire de la traiter plus tard. J'ai d'ailleurs dans ma base, d'autres relations assez similaires. Je peux utiliser les deux méthodes et voir celle qui correspond le mieux ou est la plus rapide en terme de codage. A+ |
|
|
00
|
|
|
#14 |
|
Expert Confirmé
![]() ![]() Alain Inscription : septembre 2010 Messages : 1 917 ![]() |
Nan c'est du travail en plus pour avoir de potentiels problèmes en plus. Imagines que le formulaire soit abandonné en cours de route et tu auras enregistré en dbb des truc inutiles... Il vaut mieux une soumission générale du formulaire pour éviter de générer des incohérences dans la bdd.
__________________
- Réalisations - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical. |
|
|
00
|
|
|
#15 | ||
|
Expert Confirmé
![]() ![]() Alain Inscription : septembre 2010 Messages : 1 917 ![]() |
Et pour être complet,
Dans mon dernier code, je supprime une ligne si tous les champs qui constituent la ligne n'ont pas été remplis. On peut ne supprimer une ligne que si certains champs n'ont pas été remplis. Il suffit pour cela de reconstruire le premier tableau créé dans son intégralité (avec ses clés) : Code :
__________________
- Réalisations - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical. |
||
|
|
10
|
|
|
#16 |
|
Membre habitué
![]() Inscription : septembre 2006 Messages : 101 ![]() |
Et bien, vous avez dû être gentil pour un tel cadeau de Noel
__________________
Besoin d'un prestataire? creation site web |
|
|
00
|
|
|
#17 |
|
Membre habitué
![]() Benoit En recherche de poste Web Inscription : août 2010 Messages : 189 ![]() |
Salut à tous et un grand merci à Papa "Abciweb" Noël....
![]() Je suis d'accord avec Abciweb, sur la soumission du formulaire dans son entier avec toutes les sous-parties. Il faut pourtant bien hiérarchiser cette soumission dans la mesure où la clef de la table individus n'existe pas... IL faut donc insérer la ligne concernant l'individus puis récuperer la clef (via lastinsertID()) et s'en servir pour l'enregistrement des autres parties du formulaires. JE me disais un truc, là nous parlons de l'enregistrement des données donc via un INSERT. Mais dans le cas d'une modification, n'est-ce pas plus pratique d'avoir un formulaire identique qui permettrait la mise à jouur des données pour chaque partie séparément, au lieu d'une soumission générale et donc des UPDATE table à n'en plus finir ? Du coup cela double le nombre de fichiers dans mon MVC mais bon.... |
|
|
00
|
|
|
#18 | ||
|
Membre habitué
![]() Benoit En recherche de poste Web Inscription : août 2010 Messages : 189 ![]() |
Salut ABCIWEB,
Je viens de finir de contruire l'ensemble de mon formulaire et d'adapter ton script au mien. Mais je me heurte à un petit problème. A la ligne 23, les champs non remplis sont "supprimés" de l'array $tab_enfants. Malheureusement dans la requête générée, on se retrouve avec une instruction : Code sql :
INSERT INTO enfants ("Liste_De_Tous_Les_Champs_Issus_de_$champs_bdd) values (Liste_des_champs_renseignés) exemple : Code sql :
Dans ce cas, MYSQL me renvoie une erreur puisque le second insert ne comporte pas autant de valeurs qu'il est mentionné de le début de l'instruction. Tu es d'accord ? |
||
|
|
00
|
|
|
#19 | ||
|
Expert Confirmé
![]() ![]() Alain Inscription : septembre 2010 Messages : 1 917 ![]() |
Oui je suis d'accord
Mais qu'à cela ne tienne, comme php est le roi des fonctionnalités sur les tableaux, on va pouvoir s'en tirer avec deux petites fonctions supplémentaires, à savoir array_fill_keys et array_replace : Code :
__________________
- Réalisations - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical. |
||
|
|
00
|
|
|
#20 | ||
|
Expert Confirmé
![]() ![]() Alain Inscription : septembre 2010 Messages : 1 917 ![]() |
Ouais... en y repensant un peu plus tard, j'ai ajouté du code pour ne pas avoir à en supprimer, mais il aurait été plus simple de supprimer le array_filter et de modifier la boucle. Donc voici un autre exemple plus simple (je laisse les précédentes versions en commentaire car certaines astuces peuvent servir dans d'autres circonstances) :
Code :
__________________
- Réalisations - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical. |
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com