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 :

Rendre dynamique les choix dans un select


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 30
    Par défaut Rendre dynamique les choix dans un select
    Bonjour,

    Peut-être saurez-vous m'aider ....
    J'affiche dans un select les données UNIQUES contenues dans une de mes tables (appelée "source") de la façon suivante :


    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
    $db=mysql_connect('localhost','login','mdp');
    	mysql_select_db('base_1',$db);
     
    	$sql = "SELECT * FROM source";
    	$req = mysql_query($sql) or die ('Erreur SQL : <br>' .$sql);
    	$nb_ligne = mysql_num_rows ($req);
     
    echo '
    		<table>
    			<tr>
    		<td>
    			<select name="source" size="'.$nb_ligne.'">';
     
    while 
    ($data = mysql_fetch_assoc($req)) {
     
    echo '
    <option value="'.$data[nom_source].'"> '.$data[nom_source].'<br>';
    }
     
    echo '
    		</td>
    			</tr>
    		</table>';
    J'affiche dans un second select les données UNIQUES d'une autre table de la même façon.

    Le but étant de faire du POST (champ vide impossible) et de récupérer ces données pour les implémenter dans une 3ème table appelée "activite".

    Hors en procédant de cette façon, l'affichage est "statique" et n'importe quelle donnée de mon select_2 (appelons-le comme ça) peut être POST avec n'importe quelle source.

    C'est là que porte mon questionnement !

    J'ai créer une table dite de "correspondance" ou je recence les "couples" source/donnée_2 possibles. Mon but étant d'exploiter cette table afin que mon select_2 ne me propose QUE les données_2 référencées pour telle, telle ou telle source.

    Correspondances (exemples) :

    Source_1 ==> Choix_1
    Source_1 ==> Choix_3
    Source_2 ==> Choix_1
    Source_2 ==> Choix_2
    Source_2 ==> Choix_4

    Ici si Source_1 est selectionnée dans mon champ select_1 j'aimerais que seuls les Choix_1 & Choix_3 soit affichés dans mon champ select_2 !

    En espérant avoir été assez clair pour me faire comprendre de chacun.

    Merci d'avance pour votre aide.
    Boueep

  2. #2
    Membre chevronné Avatar de sohnic
    Femme Profil pro
    bioinfo
    Inscrit en
    Mai 2003
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bioinfo

    Informations forums :
    Inscription : Mai 2003
    Messages : 428
    Par défaut
    Bonjour,
    Deja dans ton code je remplacerais <br> par </option> (pour fermer la balise option)

    et je fermerais aussi la balise <select> par un </select> apres le while....

    Sinon, pour le reste... j'ai pas tout compris. Tu as plusieurs select qui s'appelle sources à gérer ?

    Dans ce cas tu appelles tes champs <select name="sources[]"> et tu recuperes un tableau.

    Sohnic

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 30
    Par défaut
    Bonjour et merci.

    Je vais fermer mes balises .... oui

    Pour le reste, en fait j'ai un select ou j'appelle des source (c'est un outil de traitement de demandes) mes sources sont per exemple :

    Téléphone
    Mail
    Ticket

    Et j'ai un autre select ou j'ai le type de demande :

    suppression de
    ajout de
    modification de


    Hors aujourd'hui rien n'empêche de cliquer sur "Téléphone" dans le select 1 et sur "Suppression de" dans le select 2 bien que la "suppression de" par téléphone soit une chose que je ne veux pas retrouver postée dans ma base de donnée.

    C'est pourquoi j'ai créé une table de correspondance dans laquelle on retrouve toutes les possibilités SAUF celles que je ne veux pas pouvoir POSTer (comme "Téléphone / Suppression de" dans l'exemple actuel)

    Pour finir, j'aimerai exploiter cette table afin que le select 2 ne propose QUE ce que j'ai défini en face de "téléphone" (par exemple) dans cette table.

    Boueep

  4. #4
    Membre chevronné Avatar de sohnic
    Femme Profil pro
    bioinfo
    Inscrit en
    Mai 2003
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bioinfo

    Informations forums :
    Inscription : Mai 2003
    Messages : 428
    Par défaut
    Alors il faut bien que tu fasses des tableaux:

    Ton formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    <select name="source[]">
    <option>telephone</option>
    ...
    </select>
     
    <select name="action[]">
    <option>supprimer</option>
    ...
    </select>
    puis dans ton code de reponse au formulaire un truc qui pourrait ressembler à ca :

    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
     
    $tableau_sources=$_POST['source'];
    $tableau_action=$_POST['action'];
     
    foreach($tableau_source as $compteur=>$source)
    {
     
    $action=$tableau_action[$compteur];
     
    //placer ici ce que tu dois faire  en fonction de $action et $source.
    /*
    //pour mieux comprendre comment ca marche commence par faire:
    echo $source.' / '.$action.'<br>';
    */
    }
    Il y a d'autre facon de faire, mais dans ton cas, ca me parait etre le plus simple.

    S.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 30
    Par défaut
    Je ne comprend pas tout à fait :/ désolé !

    voici le code de ma page (où source et indicateur s'affiche en requêtant sur 2 tables de ma base) :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    <?php
     
     
     
    $date = date("d/m/Y");
    $heure = date("H:i");
     
     
     
    echo '
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    
    <html>
    	<head>
    		<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
    		<link rel="stylesheet" href="style.css" type="text/css">
    			
    			<title>Saisie des activit&eacute;s</title>
    	</head>
    
    
    <body background="fond.jpg">
    
    
    	<form method="post" action="add2.php">
    
    		<div style="float:left;"><Font Color=#330033 size="4"><b>Nous sommes le '.$date.'</b></font></div>
    		<div style="float:right;"><Font Color=#330033 size="4"><b>Il est '.$heure.'</b></font></div>
    
    
    
    	<table align="center" valign="middle" border="0" width="960">
    
    			<tr align="center">
    		<td colspan="3">
    			<br>	
    					<Font Color=#FF0000 size="6"><b>!!! Page TEST !!!</b></font><br>
    					<Font Color=#330033 size="6"><b>Saisie d\'une fiche</b></font><br>
    			<br>
    			<br>
    		</td>
    			</tr>
    
    
    	<td valign="middle">
    			<tr align="center">
    			
    	<td>
    		
    <table border="0">
    			<tr>
    		<td>
    					<Font Color=#330033 size="3"><b>&nbsp; &nbsp;ID de la demande</b></font>
    		</td>
    		<td >
    				&nbsp;<input name="ID" type="text" size="30" maxlength="30">
    					
    				&nbsp;<Font color=#330033 size="3"><b><a class="lien" href="aide_id.php" target="_blank">?</a></b></font>
    
    		</td>
    			</tr>
    
    									
    
    		<td>
    								<Font Color=#330033 size="3"><b>&nbsp; &nbsp;Source</b></font>
    		</td>
    
    
    
    	<td>';
     
     
     
    //Connexion à la base
     
     
    	$db=mysql_connect('localhost','root','');
    	mysql_select_db('sai_acti',$db);
     
    	$sql = "SELECT * FROM source";
    	$req = mysql_query($sql) or die ('Erreur SQL : <br>' .$sql);
    	$nb_ligne = mysql_num_rows ($req);
     
     
     
    echo '
    			<table>
    			<tr>
    		<td>
    					<select name="source" size="'.$nb_ligne.'">';
     
    while 
    ($data = mysql_fetch_assoc($req)) {
     
     
    echo '
    					
    <option value="'.$data[nom_source].'">'.$data[nom_source].'</options><br>
    ';
    }
     
     
    echo '
    					</select>
    
    		</td>
    
    
    
    			</tr>
    			</table>
    
    	</td>		
    
    		
    			
    			
    
    
    
    			
    			<tr>
    		<td>
    					<Font Color=#330033 size="3"><b>&nbsp; &nbsp;Nombre d\'itérations</b></font>
    		</td>
    
    
    
    	<td>
    
    			  &nbsp;<select name="iterations">
    			<option value="1" selected> 1</option>';
     
    	$nb_inter = 2;
    while 
    	($nb_inter < 200){
    echo '
    	<option value="'.$nb_inter.'"> '.$nb_inter.'</option>';                                 
    	$nb_inter = $nb_inter + 1;
    	}
     
    echo '
    				</select>				
    
    	</td>
    
    			</tr>
    
    		<br>		
    		<br>
    
    </table>
    
    
    
    
    
    
    		
    		<td align="center">
    			<br>
    
    					<Font Color=#330033 size="3"><b>Indicateur</b></font>
    			<br> ';
     
     
     
    //Connexion à la base
    	$db=mysql_connect('localhost','root','');
    	mysql_select_db('sai_acti',$db);
     
    	$sql_indic = "SELECT * FROM indicateur ORDER BY techno DESC, priorite ASC";
    	$req_indic = mysql_query($sql_indic) or die ('Erreur SQL : <br>' .$sql_indic);
    	$nb_ligne = mysql_num_rows ($req_indic);
     
    echo '
    	<select name="IQ" size="'.$nb_ligne.'">';
     
    while 
    	($data_indic = mysql_fetch_assoc($req_indic)) {
     
    echo '
    	<option value="'.$data_indic[iq].'"> '.$data_indic[techno].' - '.$data_indic[priorite].' : '.$data_indic[nom_iq].' - '.$data_indic[iq].' </option><br>';
    	}
     
    echo '&nbsp; &nbsp;
    	</select><br>
    
    		</td>
    			</tr>
    
    			<tr align="center">
    		<td colspan="3">
    			<br>
    			<input value="Valider" type="submit">
    			<br>
    			<br>
    		</td>
    			</tr>
    
    
    			</tr>
    
    			
    
    	</table>
    	</form>
    </body>
    </html>';
     
    ?>
    Es-tu sûr que le tableau peut répondre à mes attentes dans le cas précis ?

    Euhhhh, il vous faut aussi les tables pour l'affichage :s

    Code sql : 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    --
    -- Structure de la table `indicateur`
    --
     
    CREATE TABLE IF NOT EXISTS `indicateur` (
      `techno` varchar(5) NOT NULL,
      `iq` varchar(15) NOT NULL,
      `nom_iq` varchar(100) NOT NULL,
      `priorite` varchar(2) NOT NULL,
      `IQ2` varchar(5) NOT NULL,
      UNIQUE KEY `iq` (`iq`),
      UNIQUE KEY `nom_iq` (`nom_iq`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
    --
    -- Contenu de la table `indicateur`
    --
     
    INSERT INTO `indicateur` (`techno`, `iq`, `nom_iq`, `priorite`, `IQ2`) VALUES
    ('Notes', 'IQ11', 'Ouverture d’un compte Notes', 'P1', 'ADM1'),
    ('Notes', 'IQ12', 'Modification d’un compte Notes', 'P2', 'ADM2'),
    ('Notes', 'IQ13', 'Clôture d’un compte Notes', 'P2', 'ADM2'),
    ('NT', 'IQ21', 'Ouverture d’un compte Windows', 'P1', 'ADM1'),
    ('NT', 'IQ22', 'Modification d’un compte Windows', 'P2', 'ADM2'),
    ('NT', 'IQ23', 'Clôture d’un compte Windows', 'P2', 'ADM2'),
    ('NT', 'IQ24', 'Mutation d''un utilisateur Windows', 'P2', 'ADM2'),
    ('Notes', 'IQ31', 'Demande de « re-certification » Notes', 'NC', 'NC'),
    ('Notes', 'IQ32', 'Demande de création de MID ou de base documentaire standardisée', 'P2', 'SERV2'),
    ('Notes', 'IQ41', 'Demande pour ID Notes périmé', 'P1', 'SUP1'),
    ('Notes', 'IQ42', 'Demande de renvois d’ID Notes', 'P1', 'SUP1'),
    ('Notes', 'IQ43', 'Demande d’accès à une base Notes', 'P2', 'SERV2'),
    ('Notes', 'IQ44', 'Interventions client/serveur Notes', 'P1', 'SUP1'),
    ('Notes', 'IQ45 - IQ46', 'Restaurations et Autres demandes de renseignement Notes', 'P2', 'SERV2'),
    ('NT', 'IQ51', 'Mise à jour des drivers et imprimantes', 'P2', 'SERV2'),
    ('NT', 'IQ52', 'Déverrouillage de compte Windows, réinitialisation de mot de passe', 'P1', 'SUP1'),
    ('NT', 'IQ53', 'Intervention sur le compte machine Windows', 'P2', 'SERV2'),
    ('NT', 'IQ54', 'Demande d’accès aux ressources', 'P2', 'SERV2'),
    ('NT', 'IQ55', 'Autres demandes', 'P2', 'SERV2'),
    ('NT', 'IQ61', 'Demande intralanceur', 'P2', 'SERV2'),
    ('NT', 'IQ62', 'Gestion des quotas', 'P1', 'SUP1');
     
    --
    -- Structure de la table `source`
    --
     
    CREATE TABLE IF NOT EXISTS `source` (
      `id` int(3) NOT NULL,
      `nom_source` varchar(30) NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `nom_source` (`nom_source`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
    --
    -- Contenu de la table `source`
    --
     
    INSERT INTO `source` (`id`, `nom_source`) VALUES
    (3, 'GCA'),
    (7, 'GDH'),
    (5, 'ITIM'),
    (2, 'Mail'),
    (4, 'Projet'),
    (6, 'Service Center'),
    (1, 'Téléphone');

    Comme je ne suis vraiment pas douer j'ai du mal à imaginer en quoi la solution du tableau peut s'appliquer ici ni (surtout) comment

    Merci de te donner du mal en tout cas c'est sympa !
    Boueep

  6. #6
    Membre éclairé Avatar de Huntress
    Femme Profil pro
    Inscrit en
    Août 2004
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 475
    Par défaut
    Bonjour,

    Ton problème si j'ai bien compris ce sont des listes de sélection interdépendantes. Le choix d'une option dans la première opère le chargement des choix possibles dans la seconde. Ex : pays et ville.

    Donc ton système de données n'est pas mauvais il est même bon. Tu as une première table qui stocke les choix de la première. Et une seconde table qui stocke les "possibilités" :
    Table n°1
    1 = France
    2 = Allemagne

    Table n°2
    1 --> Paris
    1 --> Bordeaux
    2 --> Berlin


    A partir de là tu as plusieurs possibilités techniques :
    1. Au onchange de la première tu remplis la seconde, qui était jusqu'alors vide (ou inexistante).
    OU
    2. Tu gères çà avec de l'ajax pour éviter un rafraichissement qui peut être troublant pour l'utilisateur.

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

Discussions similaires

  1. Rendre dynamique les urls dans un composant menu
    Par soso78 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 31/01/2008, 10h55
  2. [C#] Contrôler les choix dans un ComboBox
    Par kinou dans le forum Windows Forms
    Réponses: 1
    Dernier message: 17/08/2006, 14h40
  3. [JTable][Header]Cherche à rendre 'dynamique' les header
    Par Hashitori dans le forum Composants
    Réponses: 1
    Dernier message: 07/04/2006, 17h13
  4. Réponses: 2
    Dernier message: 15/03/2006, 10h49
  5. Formater les libelles dans un <select>
    Par ranx dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 25/08/2005, 13h30

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