Valeur select multiple dans 1 champ mysql [Résolu/Fermé]

Signaler
-
 toubippc -
Bonjour a tous,

Voila, je suis debutant en php et je cree un petit site web,
dans se site il y a une page pour l enregistrement d un profil,
par la suite on peut modifier/completer se profil via une autre,
dans cette autre page j y ai inclu un champ select multiple dans un formulaire

Quand le visiteur a fini de remplir son formulaire,
il est renvoyer via la method post et traiter par un autre script php qui fait un update
sur la table du profil

Mon souci !
c est le select multiple....
tout le reste fonctionne, mais je n arrive pas a recuperer toutes les valeurs de mon select multiple
et de l inserer dans un champ mysql
(pour l affichage avec une echo et une boucle foreach pas de souci, tout est bien la )

J avais pour idée, de reprendre toutes les variables dans une chaines de caracteres et le separer par exemple, par des ";" avec une fonction "string" ou une de ses variante,
mais je ne sais pas combien de selection vont etre faites et donc je ne sais pas comment l integrer a cette foncion.

J ai eu donc l idée de reprendre toutes les variables et de les affichées dans un "text area" cacher dans la 2eme page php qui recoit et traite les données et d ajouter un ptit script java pour un auto submit, si celle si est existante


Ses données devrait si possible pouvoir etre reprise avec un select
reseparer par chaine au niveaux d un caractere precedement inserer
et ré-afficher dans un select (voir multiple)

( pour ne pas vous faire peur, j ai deja reussi a afficher mes données reprise de mes table mysql dans un select, je devrais savoir me debrouiller pour le reste )

Quand pensez vous ??
Y a t il une meilleur solutions pour inserer ses données dans un champ mysql ??

Merci a tous

5 réponses

Messages postés
565
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
28 décembre 2009
83
Pour récupérer toutes les valeurs d'un select multiple, tu dois utiliser une paire de crochets dans le name (name="nomduselect[]"), les valeurs seront retournées sous forme d'un array dans php.
re bonjour :),

Oui , merci patachon, ca j avais compris,... :p, puisque je dois le faire pour les afficher, par exemple pour un preview

mais comment faire pour l inserer dans un seul champ mysql ?

en bref, j aimerais l inserer dans un seul champ mysql, en chaine de caractere, et inserer apres chaque valeur un caractere.

exemple:

multiple=multiple name=language[] method=post
//selection possible
=>php
=>java
=>c++

je recupere avec echo et une boucle foreach

foreach($_POST['language'] as $value)
{
echo $value.'<br>';
}

jusque la pas de probleme, la selection va s afficher
j aimerai reprendre toutes cette selections et l inserer par dans un seul champ, par exemple varchar

et j explique plus que j ai eu l idée de reprendre toute les variables et de les inserer dans une fonctions "string" ou une de ses variantes "substr" etc... mais je n ai rien trouver qui me permettre de le faire, ou c est moi qui ne sait pas !

ou

d afficher les echo de ma boucle foreach dans un input de type: text area avec un petit script java pour etre soumis a une troisieme page de traitement ?? mais ca me parait banquale..
C est pour cela que je vous sollicite
entre temp j ai deja essayer de faire une " update concat " dans ma boucle foreach , de se style:

foreach($_POST['language'] as $value)
{


mysql_query("UPDATE `ma_table` SET mon_champ=CONCAT(ma_collonne, '$value') WHERE id='1'") or die ('erreur d insertion multiple'.mysql_error());


}

quand je fait un test sql avec cette requete sur phpmyadmin par exemple (toujours) ca marche nikel
mais dans ma boucle , rien...
pas d erreur , mais rien n est inserer dans le champ et tout ce qui aurait pu y avoir est effacer !
en plus une requete dans une boucle, sa risque d etre lourd si le visiteurs fait beaucoup de selections

merci de vos reactions !
petite erreur !! dsl pas su editer

la requete concat tester dansla boucle

foreach($_POST['language'] as $value)
{


mysql_query("UPDATE `ma_table` SET ma_collonne=CONCAT(ma_collonne, '$value') WHERE id='1'") or die ('erreur d insertion multiple'.mysql_error());


}
merci
Messages postés
565
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
28 décembre 2009
83
Désolé, j'avais mal compris ton problème.

Par contre vouloir insérer ces valeurs dans une seule colonne est une erreur.
Une colonne doit généralement contenir une seule valeur.

Car avec ton exemple, tu vas en devoir passer par un système bancal pour tester si les valeurs n'existent pas dans ta colonne avant de les insérer.

Donc une table externe pour stocker ses valeurs s'avère indispensable.
Wahhh, j etais partis dans un de ses truc pas possible de dynamiser un select multiple avec des selection reprises des champs des autres visiteurs et d en donner la possibiliter d en ajouter, etc....

mais j avais pas pensez a tester les valeurs et donc selections deja existante etc....

c est vrai je risque d avoir des doublons dans les tables, ce qui n est pas si grave si l utilisateur peut supprimer certaines de ses preferences..
mais si je dynamise le select muti avec des doublons et qu il y en a 50 on risque d avoir un long select multi avec les meme choix voir une differences infime si je doit insensibiliser a la case etc....

merci de me remettre dans la bonne voie !

ben merci, me reste plus qu a faire une table par groupe, une autre avec un champ par choix et l id qui servira a les referencer et celle ci s ajoutera a la table pref qui comportera l id de mon visiteur enregistrer

bref une table d id de preference, enfin, je devais deja la faire pour d autre fonctions, ben merci pour tout patachon !

bye