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

PHP & Base de données Discussion :

Liste à choix multiples et syntaxe SQL [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 161
    Points : 75
    Points
    75
    Par défaut Liste à choix multiples et syntaxe SQL
    Salutatous

    J’ai un formulaire contenant une liste à choix multiples :

    <select name="liste_choix_multiple" multiple="multiple" size="3">
    <option selected value="choix 1">choix 1</option>
    <option selected value="choix 2">choix 2</option>
    <option selected value="choix 3">choix 3</option>
    </select>

    J’ai créé un fichier SQL qui me génère ma table :

    CREATE TABLE nom_table (
    id int(11) NOT NULL auto_increment,
    prenom varchar(30) DEFAULT NULL,
    nom varchar(30) DEFAULT NULL,
    syntaxe ???
    )

    Quelle est la syntaxe que je dois placer dans mon fichier SQL
    pour générer dans ma table le champ correspondant à ma liste à choix multiples ?


    Merci d’avance,
    Nicomax

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Bonjour et bienvenue sur le forum,

    A quoi correspondent tes 3 choix ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 161
    Points : 75
    Points
    75
    Par défaut
    bonjour,

    il s'agit de valeurs de type texte.
    pour être plus précis, le visiteur doit choisir une ou plusieurs régions du monde dans laquelle il a eu une expérience professionnelle.

    voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <select name="experience_internationale_choix[]" multiple="multiple" size="12">
     
    <option value="Amérique du Nord" <?php if ($_POST['experience_internationale_choix']=='Amérique du Nord') {echo "selected='selected'";}?> >Amérique du Nord</option>
     
    <option value="Amérique latine / Caraïbes" <?php if ($_POST['experience_internationale_choix']=='Amérique latine / Caraïbes') {echo "selected='selected'";}?> >Amérique latine / Caraïbes</option>
     
    <option value="Union européenne" <?php if ($_POST['experience_internationale_choix']=='Union européenne') {echo "selected='selected'";}?> >Union européenne</option>
     
    </select>
    Nico

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    ah j'ai compris ta question.

    Met ton champ de type SMALLINT

    Et fait ta liste ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $liste = array(1=>"Amérique du Nord", 2=>"Amérique latine / Caraïbes", 3=>"Union européenne");
    foreach ($liste as $value=>$label) {
       if ($value == $_POST['experience_internationale_choix']) {
             $selected = 'selected="selected" ';
       }
    else {
         $selected = '';
    }
       echo '<option value="' . $value . '" ' . $selected . '>' . $label . '</option>';
    }
    Tu stockes donc dans la table uniquement 1, 2 ou 3.

    Tu peux egalement avoir un table de reference contenant
    zone_id - zone_label
    1- Amérique du Nord
    2 - Amérique latine / Caraïbes
    3 - Union européenne

    Et faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $sql="SELECT zone_id, zone_label FROM zone";
    $result = mysql_query($sql);
    while($row=mysql_fetch_assoc($result)) {
     if ($row['zone_id'] == $_POST['experience_internationale_choix']) {
             $selected = 'selected="selected" ';
       }
    else {
         $selected = '';
    }
       echo '<option value="' . $row['zone_id'] . '" ' . $selected . '>' . $row['zone_label']. '</option>';
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 161
    Points : 75
    Points
    75
    Par défaut
    merci Sabotage,
    je vais tester tout ça

    Nico

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Euh... si c'est une liste à choix multiple, ça veut dire qu'un individu peut choisir plusieurs régions. On n'a donc pas une association de type 1,n mais m,n :
    Individu -1,n----Travailler----0,n- Région

    Il faut donc une table associative...
    Individus(id, prenom, nom)
    Regions(id_region, nom_region)
    Travailler(id_individu, id_region)
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 161
    Points : 75
    Points
    75
    Par défaut pour être plus clair
    Bon j'arrive toujours pas à afficher les choix sélectionnés sous la forme :
    choix 1
    choix 2
    choix 3

    Je reprend mon exemple tout simple... pour être le plus claire possible

    ----------------------------------------------

    j'ai un fichier "index.php" contenant un formulaire avec une liste à choix multiples, que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php 
    	require('form_traitement.php');
    ?>
     
    <form action="<?php echo basename(__FILE__); ?>" method="post">
     
    <select name="liste_choix_multiple" multiple="multiple" size="3">
    <option selected value="choix 1">choix 1</option>
    <option selected value="choix 2">choix 2</option>
    <option selected value="choix 3">choix 3</option>
    </select>
     
    <br />
    <input type="submit" name="formulaire" value="envoyer">
     
    </form>
    ----------------------------------------------

    j'ai un deuxième fichier "form_traitement.php" qui traite le formulaire, que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php
     
    require('../prive/connecter.php');
     
    $sql = 'SELECT count(*) FROM membre WHERE login="'.addslashes($_POST['login']).'"';
            $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
            $data = mysql_fetch_array($req);
     
    if ($data[0] == 0) {
    	...
    } else {
    	$sql = 'INSERT INTO membre VALUES (
    		...
    		"'.$_POST['liste_choix_multiple'].'",
    		...
    	)';
    	mysql_query($sql) or die('DESOLE - ERREUR SQL : '.$sql.'<br />'.mysql_error());
    	mysql_close();
    }
    ----------------------------------------------

    Un troisième fichier "affichage.php" me permet d'afficher le résultat, que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    require('../prive/connecter.php');
     
    $requete_sql = "SELECT
    	...
    	liste_choix_multiple,
    	...
    FROM membre WHERE login='$login' OR id='$id' ";
     
    $requete_sql_bis = mysql_query($requete_sql);
    echo mysql_error();
     
    while( list(
    	...
    	$liste_choix_multiple,
    	...
    ) = mysql_fetch_array($requete_sql_bis)) {
     
    $tableau_ liste_choix_multiple = (isset($_POST["liste_choix_multiple"]))?$_POST["liste_choix_multiple"]:null;
     
    if (!empty ($tableau_ liste_choix_multiple)){
    	foreach ($tableau_ liste_choix_multiple as $liste_choix_multiple) {
    		echo $liste_choix_multiple."<br />";
    	}
    }
    ----------------------------------------------

    Et pour finir voici le fichier "table.sql" que j'importe dans PHPMyAdmin :

    CREATE TABLE membre (

    ...
    liste_choix_multiple smallint(6) NOT NULL,
    ...

    ) TYPE=MyISAM;

    ----------------------------------------------

    Je me demande si ça vient pas de ma syntaxe dans ce dernier fichier "table.sql".
    Car quand j'affiche le contenu de "liste_choix_multiple" dans PHPMyAdmin, j'ai un 0 (zéro) !!!
    Tout le reste de mon formulaire fonctionne parfaitement, il n'y a que cette fichue liste à choix multiples qui "merdoie"

  8. #8
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Normal ce champ est un SMALLINT et non une chaine de caractères, il faut remplacer "'.$_POST['liste_choix_multiple'].'" par '.$_POST['liste_choix_multiple'].' (sans les guillements), dans la requête SQL d'insertion.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 161
    Points : 75
    Points
    75
    Par défaut
    Salut Thomas,

    dans le fichier "form_traitement.php" j'ai donc rempacé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "'.$_POST['liste_choix_multiple'].'"
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '.$_POST['liste_choix_multiple'].'
    ce qui me donne le message d'erreur suivant :
    DESOLE - ERREUR SQL : INSERT INTO membre VALUES ( "...", "...", ... )
    Unknown column 'Array' in 'field list'


    -------------------------------------------------

    en fait, dans mon fichier "form_traitement.php", ma requête est de cette forme (avec les simple-quotes encadrées par des double-quotes) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sql = 'INSERT INTO membre VALUES ( 				
    "",
    "'.$_POST['variable1'].'",
    "'.$_POST['variable2'].'",
    "'.$_POST['liste_choix_multiple'].'"
    )';
    -------------------------------------------------

    Mais si je retire les double-quotes à une des lignes, comme ci-dessous, ça me génère le message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sql = 'INSERT INTO membre VALUES ( 				
    "",
    "'.$_POST['variable1'].'",
    "'.$_POST['variable2'].'",
    '.$_POST['liste_choix_multiple'].'
    )';

  10. #10
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    ha oui,

    Normal, l'utilisateur peut faire plusieurs choix, donc liste_choix_multiple renvoie un Array.

    Par contre je ne comprends pas pourquoi le champ est un SMALLINT alors, car déjà, les values de ce menu déroulant sont des chaines de caractères.

    Et si jamais tu voudrais insérer des Id tu ne pourrais pas, car après tu serais dans l'impossibilité de les récupérer de facon logique.

    je te conseille de donc de mettre ton champ en VARCHAR et de remettre les guillements autour de ce champ, et d'appeler la fonction implode qui va écrire les choix, séparés par une virgule.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $sql = 'INSERT INTO membre VALUES (
    "",
    "'.$_POST['variable1'].'",
    "'.$_POST['variable2'].'",
    "'.implode(',',$_POST['liste_choix_multiple']).'"
    )';
    Comme ca ensuite tu peux récupérer les choix du membres comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $choix = explode(',',$member['nom_champ_choix']);
    foreach($choix as $c){
       echo $c;
    }

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 161
    Points : 75
    Points
    75
    Par défaut
    enfin, les données de ma liste de choix multiples s'insèrent correctement dans ma bdd (je le vois dans PHPMyAdmin)

    j'y suis presque MAIS je n'arrive toujours pas à les afficher dans ma page !!!

    si je reprend mon code d'affichage, que voici :

    $tableau_ liste_choix_multiple=(isset($_POST["liste_choix_multiple"]))?$_POST["liste_choix_multiple"]:null;

    if (!empty ($tableau_ liste_choix_multiple)){
    foreach ($tableau_ liste_choix_multiple as $liste_choix_multiple) {
    echo $liste_choix_multiple."<br />";
    }
    }

    où dois-je mettre le "explode()" dans tout ça ?

  12. #12
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Le explode te permet de créer un tableau à partir de chaines de caractères séparées par un caractère.

    Lorsque tu récupères les choix de la base de données, tu les as sous la forme d'une chaine : "choix1,choix2,choix3". Pour en faire un tableau tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $choix = explode(',',$utilisateur['choix']);

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 161
    Points : 75
    Points
    75
    Par défaut
    ya un truc que je saisi pas bien au niveau du nommage des variables !!!

    dans ton mail précédent tu me mets :

    $choix = explode(',',$member['nom_champ_choix']);
    foreach($choix as $c){
    echo $c;
    }

    mais je ne sais pas à quoi correspondent ces variables en rouge !

    ----------------------------------------

    moi, comme nom de variable j'ai "liste_choix_multiple"

    donc si je code comme ça :

    $choix = explode(',',$JE_MET_QUOI['liste_choix_multiple']);

    foreach ($choix as $JE_MET_QUOI) {
    echo $JE_MET_QUOI."<br />";
    }

    désolé mais là je patoge !

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 161
    Points : 75
    Points
    75
    Par défaut J'AI TROUVÉ !
    après de multiples essais, en codant de cette manière, ça s'affiche correctement :

    $choix = explode(',',$liste_choix_multiple);

    foreach ($choix as $value) {
    echo $value."<br />";
    }

    merci à tous pour votre aide
    et à une prochaine
    Nico

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2013] Listes à choix multiples en cascade / Code SQL
    Par Maair dans le forum IHM
    Réponses: 5
    Dernier message: 05/01/2015, 18h24
  2. Zone de liste à choix multiple
    Par zoom61 dans le forum Access
    Réponses: 2
    Dernier message: 31/01/2006, 13h06
  3. Utilisation des liste à choix multiples
    Par mic79 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 04/07/2005, 11h40
  4. recuperer valeur liste choix multiple
    Par gabychon dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 13/06/2005, 11h47
  5. [Débutant][JSP] récupération liste choix multiple
    Par Jovial dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 14/05/2004, 13h59

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