IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[PHP-JS] R�cup�rer plusieurs valeurs "<input>" dans un m�me champ (bdd)


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de Pepito2030
    Inscrit en
    Juillet 2006
    Messages
    43
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Par d�faut [PHP-JS] R�cup�rer plusieurs valeurs "<input>" dans un m�me champ (bdd)


    J'ai plusieurs case � cocher dans un formulaire et j'aimerais arriver � tout mettre dans un m�me champ en s�parant chaque valeur par une "," ou autre caractere.

    Voici un exemple :




    Admettons que dans ma base de donn�es, j'ai une table "membres" ou figure le champ "style" et dedans j'aimerais arriver � rentrer les valeurs coch�es du formulaire :

    Quand il s'agit de rentrer une seule case � cocher �a va je sais faire mais quand il y en a plusieurs je bloque...

    Dans mon formulaire :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    <input name="style" value="bcbg" type="checkbox">bcbg
    <input name="style" value="classique" type="checkbox">classique
    <input name="style" value="branchée" type="checkbox">branchée
    <input name="style" value="business" type="checkbox">business
    <input name="style" value="décontracté" type="checkbox">décontracté
    <input name="style" value="sportif" type="checkbox">sportif
    J'ai un bouton submit tout � la fin de mon formulaire (�a envoie les donn�es sur une page de traitement en php).

    Page PHP qui traite mon formulaire (pour une seule case � cocher) :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    // Je récupère la donnée d'une case à cocher
    $style = $_POST['style'];
     
    // J'insère la valeur dans la table, dans le champ "style"
    mysql_query("INSERT INTO membres (style) VALUES ('".$style."')");
    Quelqu'un pourrait il m'�clairer sur la technique � employer pour ins�rer plusieurs valeurs (de case � cocher) dans un m�me champ?

    Voila j'esp�re que j'ai �t� assez clair dans mon exemple

    Bonne soir�e et merci aux personnes qui m'aideront.

  2. #2
    Membre �m�rite
    Inscrit en
    Mai 2002
    Messages
    673
    D�tails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par d�faut
    Donne des noms dif�rents a chacune de tes cases a coch�s... sinon, je pense que c au salon javascript que tu trouveras la solution...

  3. #3
    Membre averti Avatar de Pepito2030
    Inscrit en
    Juillet 2006
    Messages
    43
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Par d�faut
    Si je donne un nom � chaque case � cocher je serai oblig� de cr�er autant de champs dans ma table que de cases � cocher?

  4. #4
    Membre �prouv� Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    D�cembre 2005
    Messages
    1 348
    D�tails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : balayeur

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 1 348
    Par d�faut
    salut,
    J'ai pas test�, mais est ce que tu as essay� de faire un truc genre :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    $myStr = '';
    for ($i=0;$i<count($style);$i++){
    <div style="margin-left:40px">$myStr .= $style[$i].',';</div>}

  5. #5
    Membre �m�rite
    Inscrit en
    Mai 2002
    Messages
    673
    D�tails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par d�faut
    Si tu te pose ce genre de question, c'est que ta BDD est mal construite ou ne correspond pas a ton interface.

    Petite le�on sur les MCD :

    un article peut avoir une ou plusieurs cat�gories. Dans ce cas, on ne cr�e pas de relation CIF (contrainte d'integrit� fonctionnelle, ou relation parent, c-a-d mettre un champs categorie dans ta table article), mais on cr�� une table interm�diaire que tu appelera par exemple "appartient". Appartient n'as pas de cl� primire, et juste 2 champs de m�me type que les cl�s primaires de articles et cat�gorie. Pour chaque association cat�gorie-articles, tu ajoute une entr�e dans cette table avec le code cat�gorie et le code article.

  6. #6
    Membre averti Avatar de Pepito2030
    Inscrit en
    Juillet 2006
    Messages
    43
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Par d�faut
    Citation Envoy� par gloubi
    Si tu te pose ce genre de question, c'est que ta BDD est mal construite ou ne correspond pas a ton interface.
    je suis d�butant j'aurais peut �tre du le pr�ciser au d�but

  7. #7
    Membre �m�rite
    Inscrit en
    Mai 2002
    Messages
    673
    D�tails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par d�faut
    y'a pas de mal � �tre d�butant ^^

    revois juste la structure de ta base avant de poursuivre. Je t'avous qu'a l'�poque ou j'�tais en 1er ann�e d'info, j'ai moi aussi fait cette erreur ^^

    Si tu es maxi d�butant, tu comptais peut �tre m�me �crire en dur le mot "classique" dans ta table article (j'ai dit article, mais vu l'exemple, �a serait plutot la table 'user' ^^), ce que je t'encourage a ne surtout pas faire.

    Si c'est le cas, dis le moi, je te ferai un topo rapide sur la fa�on de structurer tout �a.

  8. #8
    Membre averti Avatar de Pepito2030
    Inscrit en
    Juillet 2006
    Messages
    43
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Par d�faut
    Dans mon exemple,

    J'ai 6 cases � cocher...

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    <input name="style" value="bcbg" type="checkbox">bcbg
    <input name="style" value="classique" type="checkbox">classique
    <input name="style" value="branchée" type="checkbox">branchée
    <input name="style" value="business" type="checkbox">business
    <input name="style" value="décontracté" type="checkbox">décontracté
    <input name="style" value="sportif" type="checkbox">sportif
    Admettons que la personne coche deux cases... "bcbg" et "classique"

    Donc dans le champ "style" dans ma base donn�es j'aurais bcbg,classique ou bcbg|classique.

    J'ai le droit de faire comme �a?

    Et plutard si j'ai envie d'afficher le champ "style" pour une personne j'utiliserai explode()

  9. #9
    Membre �m�rite
    Inscrit en
    Mai 2002
    Messages
    673
    D�tails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par d�faut
    SURTOUT PAS

    non non non, il faut surtout pas faire comme �a... acorde moi 15-20min, je te fait un topo la dessus.

  10. #10
    Membre �m�rite
    Inscrit en
    Mai 2002
    Messages
    673
    D�tails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par d�faut
    Il y a une r�gle �l�mentaire dans toute base de donn�es qui se respecte, ON NE FAIT PAS DE DOUBLONS (tout comme on ne stock jamais dans une BDD une valeure calcul�e � partir d'autre valeurs de la bdd).

    Je vais �tre concret : admettons que tu sois en train d'associer a des gens des styles (bcbg, classique etc...).

    La vrai fa�on de faire, la seule avec tu ne te cassera pas les dents, c'est de cr�er plusieurs tables.

    Si une personne ne peut avoir qu'un et un seul style, il te faudra 2 tables.
    La table "user" (qui a un identifiant unique, appel� cl� primaire, et tous les champs que tu veux qui sont en rapport direct avec la personne, comme nom, prenom, adresse, cp, ville etc...) et une table "style".
    La table style sera constitu� de 2 champs qui seront par exemple id_style (cl� primaire, identifiant de fa�on unique chaque style) et nom_style.
    Ta table sera alors renseign� dans ton cas comme suit :

    style(id_style (entier), nom_style(chaine de caractere))
    1, bcbg
    2, classique
    3, branch�
    4, etc...

    ainsi, tu feras ton association en ajoutant dans ta table 'user' une "cl� �trang�re", qui fera r�f�rence a l'un des enregistrements de la table style. Tu me suis ?
    concr�tement, il faudra que tu ajoute dans ta table 'user' un champs style_user (de meme type que id_style, donc un entier).
    Ainsi, dans ta table user, le style sera identifi� par un num�ro, et tu pourras changer/ajouter des styles directement dans la table style sans pourrir toute ta base de donn�e.

    Ensuite, si tu veux savoir de quel style est une personne, tu feras une requete sql qui ressemblera � :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
     
     
    select * from user, style where user.id_user = 124 and style.id_style = user.style_user;
    tu r�cup�reras ainsi directement toutes les information sur l'utilisateur, et son style en toute lettre tel qu'il est stock� en BDD AU MOMENT OU TU FAIS LA REQUETE.

    Bon, je fais une pause clope, et je t'explique ensuite comment on fait quand on veut associer plusieurs style a une personne (car la, c'est le cas 1 et 1 seul style / personne).

  11. #11
    Membre averti Avatar de Pepito2030
    Inscrit en
    Juillet 2006
    Messages
    43
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Par d�faut
    J'ai un ami qui m'a dit que je pouvais faire comme �a

    Donc en fait j'�tais mal parti

  12. #12
    Membre �m�rite
    Inscrit en
    Mai 2002
    Messages
    673
    D�tails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par d�faut
    j'ajouterais qu'avec la m�thode pr�c�demment d�crite, tu peux construire ton formulaire DYNAMIQUEMENT, c-a-d qu'a chaque fois qu'un style est ajout� dans la table style, tu peux le proposer en option sur ta page SANS MODIFIER LE CODE !

    exemple :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
     
    <form method="POST" action="associer_style.php">
    <input type="hidden" value="<?php echo $id_user; ?>"> <!-- en admettant que ton utilisateur soit deja enregistré et identifié par le le numero contenu dans la variable $id_user-->
    <select name="style">
    <?php
    $req = mysql_query('select * from style order by nom_style'); // ordre alphabétique
    while($res = mysql_fetch_array($req))
       echo '<option value="'.$res[id_style].'">'.$res['nom_style'].'</option>';
    ?>
    </select>
    </form>
    Il suffit alors dans la page associer_style.php de faire figurer le script :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
     
    $id_user = $_POST['id_suer'];
    $style = $_POST['style'];
    if(is_numeric($id_user) && is_numeric($style))
        mysql_query('update user set style_user = '.$style.' where id_user = '.$id_user);
    et si tu veux afficher une liste des gens avec leur style :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
     
    <?php
     
    $req = mysql_query('select * from user, style where style.id_style = user.style_user');
    while($res = mysql_fetch_array($req))
         echo strtoupper($res['nom_user']).' '.$res['prenom_user'].' : '.$res['nom_style'];
    ?>
    ok, maintenant, vais faire le topo une personne plusieurs styles...

  13. #13
    Membre �m�rite
    Inscrit en
    Mai 2002
    Messages
    673
    D�tails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par d�faut
    Maintenant, admettons qu'une personne puise avoir plusieurs style... l'erreur a ne pas faire est de mettre plusieurs champs style dans ta table user.

    Pour �a, on va utiliser ce qu'on appel une "relation".

    Une relation est une table interm�diaire, sans cl� primaire et ne poss�dant (le plus souvent) que des cl�s �trang�re. Cela permet d'associer 0 a n style a une personne et de 0 a n personnes a chaque style.

    Dans notre exemple, on ne sait pr�cis�ment pas combien de style aura chaque personne.

    La premi�re chose a faire va �tre de supprimer de ta table 'user' ton champs "style_user".

    Ensuite, tu cr�� une nouvelle table, qui s'appel "relation_style_user" (par exemple).
    Dans cette table, 2 colonnes : id_style (du meme type que la cl� primaire de ta table style) et id_user (du meme type que ta cl� primaire de la table user).

    A chaque fois que tu voudras associer un style a un utilisateur, tu ajoutera un enresitrement contenant la cl� primaire de l'utilisateur, et celle du style.
    Pour effacer un style, tu efface tout simplement l'enregistrement correspondant.

    Ainsi, pour connaitre tous les styles associ�s � un utilisateur, on ecriras le script suivant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    <?php
    $id_utilisateur = 178; // on va dire que tu veux connaitre les styles de l'utilisateur n°178
    $req = mysql_query('select * from relation_style_user, style where relation_style_user.id_user = '.$id_user.' and style.id_style = relation_style_user.id_style');
     
    while($res = mysql_fetch_array($req))
    {
         echo $res['nom_style'].'<br>';
    }
    ?>
    voil� voil�, je t'encourage vivement a rechercher sur google MCD (mod�le conceptuel des donn�es) et MERISE, ou on t'expliquera tout �a en d�tail.

    Dans tous les cas, si tu continus sur la voie sur laquelle tu es parti, ton sites sera forc�ment boiteu � un moment ou un autre.

  14. #14
    Membre �m�rite
    Inscrit en
    Mai 2002
    Messages
    673
    D�tails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par d�faut
    Citation Envoy� par Pepito2030
    J'ai un ami qui m'a dit que je pouvais faire comme �a
    Oh, tu peux, mais vraiment tu vas te faire chier, et je t'explique pas a quel point la maintenance de ton site vas �tre ignoble... sans parler de la lourdeur des script qui vont en d�couler, etc...

    Dans tous les cas, ton ami est � cot� de la plaque !

  15. #15
    Membre averti Avatar de Pepito2030
    Inscrit en
    Juillet 2006
    Messages
    43
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Par d�faut
    Citation Envoy� par gloubi
    voil� voil�, je t'encourage vivement a rechercher sur google MCD (mod�le conceptuel des donn�es) et MERISE, ou on t'expliquera tout �a en d�tail.

    Dans tous les cas, si tu continus sur la voie sur laquelle tu es parti, ton sites sera forc�ment boiteu � un moment ou un autre.
    Ok merci pour tes explications pr�cises et pour le temps pass� � me r�pondre. MCD et MERISE j'ai d�ja entendu parler de �a en cours d'informatique en BTS (mais je n'�tais pas en bts informatique).

    Mais par exemple, dans un formulaire d'inscription d'un site de rencontres il y a plein de cat�gories et de choix possibles par exemple :

    Hobbies : lecture, cin�ma, sport...
    Style : bcbg, d�contract�, sportif...

    Je dois utiliser le mcd pour faire �a? �a va me faire beaucoup de tables � la fin

  16. #16
    Membre �m�rite
    Inscrit en
    Mai 2002
    Messages
    673
    D�tails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par d�faut
    oui, MCD et beacoup de table. Mais t'inqui�te pas, c'est LA bonne m�thode.

    Dis toi juste qu'il ne doit JAMAIS y avoir redondance de l'information dans une bdd. C'est une regle universel pour les SGBDR (syst�me de gestion de base de donn�es relationnelles).
    en l'occurence, avec la m�thode pr�cedemment d�crite, le mot "BCBG" par exemple n'apparaitra qu'une seule dans TOUTE la base (ce qui constitue en soit egalment une optimisation en terme de stockage).
    De la m�me mani�re, en modifiant l'orthographe de BCBG, les r�percussion seront im�diate sur TOUS les utilisateur, d�ja inscrit, en cours d'inscription et a venir.
    Tu verras �galement que c'est une optimisation pour les traitement, car rechercher un num�ro dans une BDD (surtout si tu index tes tables) est une op�ration bien plus l�g�re qu'extraire un tableau pour chaque utilisateur puis de le comparer � un terme en dur. Et je t'explique pas si t'as chang� l'orthographe du mot en cours d'exploitation... entre les gens qui l'ont orthographi� de l'ancienne fa�on, ou de la nouvelle... �a compte aussi pour les sites multilingues ^^

  17. #17
    Membre averti Avatar de Pepito2030
    Inscrit en
    Juillet 2006
    Messages
    43
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Par d�faut
    Merci beaucoup pour le temps passer � me r�pondre, c'est clair comme de l'eau de roche maintenant !!

    Je vais me coucher moins b�te.

    Mon probl�me est je vais me remettre au boulot d�s demain.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Input et select dans un m�me champ ?
    Par Lazarey dans le forum Servlets/JSP
    R�ponses: 2
    Dernier message: 22/09/2008, 14h59
  2. r�cup�rer la valeur d'un input file
    Par july dans le forum G�n�ral JavaScript
    R�ponses: 3
    Dernier message: 26/11/2007, 11h17
  3. r�cup�rer plusieurs valeurs dans un champ hidden
    Par karimphp dans le forum Langage
    R�ponses: 3
    Dernier message: 07/12/2006, 17h13
  4. [SQL] R�cup�rer plusieurs valeurs
    Par bogsy15 dans le forum PHP & Base de donn�es
    R�ponses: 14
    Dernier message: 09/08/2006, 10h46
  5. [PHP-JS] R�cup�rer les valeurs des checkbox
    Par jamirokoi dans le forum Langage
    R�ponses: 3
    Dernier message: 07/04/2006, 16h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo