PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 12-04-2014 18:35:29

Akramweb
Membre
Lieu : Casablanca
Inscription : 12-04-2014
Messages : 3

Formulaire avec des champs supplémentaire

j'ai un formulaire d'inscription qui permet d'ajouter des champs supplémentaire, a ce moment mon code ça marche.
mon problème c'est que je dois ajouter des champs supplémentaire a chaque champs supplémentaire ajouté auparavant.
je m'explique 'le client doit ajouter un produit et pour chaque produit il peut attacher une ou plusieurs photos', même a ce niveau tout marche bien sauf si le client ajoute 2 produits et il a oublié d'attacher des photos au premier produit là je trouve un problème. voici le code que j'ai trouvé puis modifier.

function ajouter_tache(){
 
var conteneur = document.getElementById('tache_client');
 
var tache_div = document.createElement('div');
var check = document.createElement('input');
var produit = document.createElement('input');
var add_pj = document.createElement('img');
 
check.type = 'checkbox';
 
produit.name = 'produit[]';
produit.type = 'text';
produit.size = '60';
produit.value='Produit';
 
add_pj.src = 'images/add_pic.png';
 
add_pj.onclick = function(){
var undiv = document.createElement('div');
var fichs = document.createElement('input');
var checks = document.createElement('input');
fichs.name = 'pjs[]';
fichs.type = 'file';
checks.type = 'checkbox';
 
checks.onclick = function(){
lefieldset = undiv.parentNode;
lefieldset.removeChild(undiv);
}
 
undiv.appendChild(fichs);
undiv.appendChild(checks);
undiv.appendChild(document.createTextNode("Enlever"));
conteneur.appendChild(undiv);
}
 
check.onclick = function(){
lefieldset = tache_div.parentNode;
lefieldset.removeChild(tache_div);
}
 
tache_div.appendChild(produit);
 
tache_div.appendChild(add_pj);
 
tache_div.appendChild(check);
tache_div.appendChild(document.createTextNode("Enlever"));
 
conteneur.appendChild(tache_div);
}

Hors ligne

#2 13-04-2014 08:54:21

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Formulaire avec des champs supplémentaire

Bonjour,

Un code non indenté est difficile à lire (on y passe 2 fois plus de temps pour rien). Vous devriez créer de plus des fonctions/méthodes unitaires pour vos tâches récurrentes, car si la décomposition en tâches élémentaires c'est bien, la factorisation de votre code doit en faire partie, sinon cela devient difficile à maintenir dans le temps, voire tout court pour quelqu'un qui n'en est pas l'auteur.

Le moyen le plus efficace de résoudre votre problème est d'attribuer un id pour chaque produit de manière à pouvoir rajouter une photo P à un produit X sans distinction.

Note: vous conviendrez aussi qu'après avoir lu votre exposé, on a du mal à se représenter ce qu'est pour votre interface un conteneur "tâche client", ce qui n'aide pas à la compréhension.

Bon week-end.

Dernière modification par Jc (13-04-2014 11:43:12)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#3 14-04-2014 12:16:27

Akramweb
Membre
Lieu : Casablanca
Inscription : 12-04-2014
Messages : 3

Re : Formulaire avec des champs supplémentaire

<fieldset id="tache_client">
<input type="button" value="Ajouter Produit" onclick="ajouter_tache()" />
</fieldset>

Hors ligne

#4 14-04-2014 21:46:39

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Formulaire avec des champs supplémentaire

Bonsoir,

Merci pour la précision, on comprends mieux les choses ainsi.
2 remarques si vous me le permettez:
- Il est maladroit d'inclure vos div produit dans votre fieldset. Il vaut mieux le faire à l'extérieur dans un conteneur qui le suit dans le dom (juste en dessous).
- La solution je vous l'ai donné et la voici :

Le moyen le plus efficace de résoudre votre problème est d'attribuer un id pour chaque produit de manière à pouvoir rajouter une photo P à un produit X sans distinction.

La manière qui me semble la plus efficace pour l'implémenter est de rajouter en attribut de votre div représentant votre tache_div l'id de votre produit concerné.
ex: <div id="prd_1234">.... </div> le préfixe prd_ servant à qualifier un produit.

++

Dernière modification par Jc (14-04-2014 21:47:17)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

Pied de page des forums