Insertions multiples (case à cocher, champs ...)

Résolu
cs_PatX Messages postés 34 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 11 mai 2007 - 24 févr. 2006 à 13:12
cs_PatX Messages postés 34 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 11 mai 2007 - 27 févr. 2006 à 13:58
Bonjour !

J'ai un petit soucis avec l'administration de mon menu : le but du jeu, c'est de créer les liens d'un menu en les insérant dans une table d'une base de données et d'y associer des modules. Quand on clique sur le libelle d'un lien, on charge les modules sur 2 colonnes, ordonnés selon un certain ordre définit par le "poids" de chaque module.

Tout ça est géré via une interface d'admin dont vous avez un aperçu ici :

Là où je bloque, c'est lors de l'insertion des infos dans la base pour les modules. J'ai 3 types d'infos à insérer :
- le nom du module
- la colonne où il doit apparaître
- sa position dans la colonne

Pour ça, je passe par des cases à cocher et des tableaux (array) :
-
- <select name="colonne[]"><option value="1">1 | -</option><option value="2">- | 2</option></select>
-

Vous avez un aperçu ci-dessus. Lors de l'insertion, j'utilise des foreach qui récupèrent les valeurs des tableaux pour les insérer, mais voilà le problème : les dimensions des tableaux ne sont pas les mêmes. J'obtiens les trois tableaux que vous avez dû voir :

Un qui liste les modules cochés : Array ( [0] => event [1] => latest_single [2] => pic [3] => recommand )
Un qui liste les colonnes affectées : Array ( [0] => 1 [1] => 1 [2] => 1 [3] => 2 [4] => 2 [5] => 1 )
Un qui liste les poids à affecter : Array ( [0] => [1] => 1 [2] => 2 [3] => 1 [4] => 2 [5] => )

Comme vous le remarquez, le premier tableau liste les 4 cases cocher, mais les suivant prennent en compte toutes les valeurs des input et select, ce qui produit un décalage à l'insertion des données. La solution la plus simple serait de charger une page qui listerait uniquement les modules cochés avec les options "colonne" et "poids" et de ce fait générerait des tableaux de dimensions identiques. Mais je souhaiterai pouvoir renseigner et insérer toutes les infos depuis une seule page avec une ou deux requêtes. Comment me conseillez-vous de procéder ?

D'avance merci pour vos réponses !

PS : j'ai fait des recherches dans les codes sans trouver de réponses et ça fait 3 jours que je planche là dessus, alors le premier qui me fournit la soluce obtient mon éternelle reconaissance lol !
A voir également:

15 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 févr. 2006 à 13:23
Hello,

je te conseillerais de changer de façon de créer tes tableaux, pour ma part. Puisque tu utilises foreach, tu peux avoir une clef, et une valeur.
Donc au lieu de créer tes tableaux ainsi :
name="tablo[]"
je ferais ceci:
name="tablo[',$clef,']"

Ainsi, tu pourras très facilement faire correspondre le tableau crée par tes checkboxes (tableau qui en effet ne renverra quelquechose QUE si une checbox est cochée) et ceux de tes input et de tes select. Parce que tu sauras quelle clef tu dois aller chercher.

Jolie interface, sinon :-)
3
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
24 févr. 2006 à 13:24
Salut,

Tout ce que tu fais est très bien... Ton problème va facilement être résolu et ce sera parfait !

Au lieu de mettre :
-
-
<select name="colonne[]"><option value="1">1 |
-</option><option value="2">- |
2</option></select>
-

mets :
$i = ???; // for($i=0;$i<?;$i++)
-
-
<select name="colonne['.$i.']"><option value="1">1 |
-</option><option value="2">- |
2</option></select>
-

Tu le comprends, les tableaux retournés seront alors (par exmple) :
Un qui liste les modules cochés : Array ( [0] => event [1] => latest_single [4] => pic [5] => recommand )
Un qui liste les colonnes affectées : Array ( [0] => 1 [1] => 1 [2] => 1 [3] => 2 [4] => 2 [5] => 1 )
Un qui liste les poids à affecter : Array ( [0] => [1] => 1 [2] => 2 [3] => 1 [4] => 2 [5] => )

Il sera ensuite facile de faire correspondre les réponses des checkbox avec les autres champs.

//Par exemple, tu peux définir un tableau de réponses par défaut pour le tableau $module :
$module_default = array_fill(0,0,5);
// puis combler les trous de $module avec :
$module = array_merge($module, $module_default);

Voilà

Je te laisse chercher dans cette direction...
A+
3
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 févr. 2006 à 13:28
Lol...grillé J_G ;-)

Mais comme tjrs, ton explication est plus complète que la mienne :-) Je suis bien plus flemmard que toi!
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
24 févr. 2006 à 13:32
Petit filou va !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_PatX Messages postés 34 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 11 mai 2007
24 févr. 2006 à 13:35
Merci à tous les deux pour vos indications ! Je vais tâcher de me remettre au travail bien vite, moi qui croyait n'avoir de réponses que dans l'aprem ! @ bientôt donc !
0
cs_PatX Messages postés 34 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 11 mai 2007
24 févr. 2006 à 14:53
Alors j'ai regardé de plus près les fonctions array_fill() et array_merge() et je pense avoir compris comment elles fonctionnent : la première rempli un tableau à partir d'une case données, sur un nombre de cases définis avec une même valeur ; la seconde prends en compte deux tableaux en ajoutant les valeur du deuxième tableau à la fin du premier.

Mais je ne vous suis pas vraiment dans votre raisonnement de valeur par défaut à ajouter, pourriez-vous m'éclaircir un peu ce sujet s'il vous plaît ? (description ou exemple etc.)
Merci pour votre aide
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
24 févr. 2006 à 16:37
Exemple 1. Exemple avec array_merge()

<?php
$array1 array ("couleur"> "rouge", 2, 4);
$array2 array ("a", "b", "couleur"> "vert", "forme" => "trap&#233;zo&amp;Ocirc;de");

$result = array_merge ($array1, $array2);

print_r($result);

?>


L'exemple ci-dessus va afficher :



Array

(

    [couleur] => vert

    [0] => 2

    [1] => 4

    [2] => a

    [3] => b

    [forme] => trap&#233;zo&amp;Ocirc;de

)

Donc on voit bien dans cet exemple que je me suis tromp&#233; de sens dans l'ordre des argument pass&#233;s &#224; array_merge()...


$array1['couleur'] a &#233;t&#233; remplac&#233; par $array2['couleur'].

donc, tu parts du tableau par d&#233;faut, et tu "merge" le tableau de r&#233;sultat.


Ainsi, les valeurs du tableau de r&#233;sultat remplaceront les valeurs du tablea par d&#233;faut, SI ELLES EXISTENT. Il en r&#233;sultera un tableau avec des valeurs par d&#233;faut l&#224; o&#249; il n'y avait pas de valeur choisie...


bon, c'est pas tr&#232;s clair, un petit entrainement te montrera vite l'int&#233;ret de cette technique...





A+





                
0
cs_PatX Messages postés 34 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 11 mai 2007
24 févr. 2006 à 20:38
J'ai essayé de faire des tests avec array() et array_merge() et j'ai compris une partie du fonctionnement (si une donnée n'existe pas dans le premier tableau elle est ajoutée si elle porte le même titre la donnée est mise à jour etc.) mais je ne sais toujours pas comment m'y prendre pour former mes tableaux correctement, récupérer les bonnes valeurs (après un traitement avec array_merge) et les insérer enfin dans ma base.

Ca m'énerve d'autant plus qu'une fois ce problème résolu au niveau de l'administration, je pourrais enfin exploiter réellement ce site ! Je partage mon code original (sans les array) à cette adresse pour ne pas encombrer le topic : http://myspeeding206.free.fr/__DL/code.txt

J'espère que vous pourrez soit me faire une petite démo où me renvoyer vers un tutoriel car là, j'avouerai que je nage quand même (ça fait que 4 jours que j'ai réussi à réaliser des traitements avec des checkboxes alors soyez indulgent avec un néophyte )

Merci à vous !
0
cs_PatX Messages postés 34 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 11 mai 2007
25 févr. 2006 à 23:40
up !
0
cs_PatX Messages postés 34 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 11 mai 2007
26 févr. 2006 à 11:47
J'a beau faire des tests, tout ce que je vois, c'est que j'arrive pas à trouver de solution pour mon cas car il faut que les cases du tableau soient nommées par des noms. Le premier exemple fonctionne mais pas le deuxième ; mais moi, c'est le dernier qu'il faut que j'utilise car mon formulaire retourne le nom d'un tableau sans nom de cases dedans.

Exemples :

Array
(
[mod0] => module
[mod1] => module
[mod2] => module
)

Array
(
[mod1] => event
)

- exécution array_merge() :
Array
(
[mod0] => module
[mod1] => event
[mod2] => module
)
<hr>Array
(
[0] => event
[1] => latest_single
[2] => pic
[3] => recommand
[4] => pic
[5] => recommand
)

Array
(
[0] => blabla
[1] => bienvenue
[4] => single
[5] => 000
)

- exécution array_merge() :
Array
(
[0] => event
[1] => latest_single
[2] => pic
[3] => recommand
[4] => pic
[5] => recommand
[6] => blabla
[7] => bienvenue
[8] => single
[9] => 000
)

Comment puis-je faire ? Aidez moi s'il vous plait, ca va faire 3 jours que je tourne autour du pot sans trouver de soluce !
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
27 févr. 2006 à 11:32
De retour de WE... no-paniK !
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
27 févr. 2006 à 12:24
Puis-je utiliser
http://myspeeding206.free.fr/-PLM/contact.php?choix=Contact

pour te transmettre le script résultat... ?
0
cs_PatX Messages postés 34 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 11 mai 2007
27 févr. 2006 à 13:35
Jamais testé l'envoi lol, c'était un début d'application web de gestion de contenu que je n'ai pu finir car j'ai repris les études, mais si tu veux y faire honneur y a pas de problème ! Si ca ne marche pas, je t'enverrai mon mail par MP
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
27 févr. 2006 à 13:52
c'est fait
0
cs_PatX Messages postés 34 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 11 mai 2007
27 févr. 2006 à 13:58
Mail bien reçu, je vois qu'il y a pas mal de commentaires, merci beaucoup pour avoir pris le temps d'anoter le script ! Je vais regarder tout ça
0
Rejoignez-nous