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 :

Problème avec un SELECT [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre actif Avatar de glloq8
    Inscrit en
    Novembre 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Novembre 2002
    Messages : 298
    Points : 255
    Points
    255
    Par défaut Problème avec un SELECT
    Bonjour,

    sur un site que je suis en train de faire, j'ai une partie Offres d'emploi.

    Dans la partie administrative, je peux ajouter, supprimer ou modifier une annonce.

    Quand je choisi ajouter, j'ai un formulaire à remplir pour ajouter dans la base.
    Sur ce formulaire, j'ai un select avec tous les départements de france. Quand je valide, il mets le nom du département (value) dans la base, pas de problème, ça marche.

    Mais imaginons que le poste change de département...
    Dans ce cas, je peux modifier mon offre d'emploi, mais c'est là qua ça se corse (comme disait Napoléon)...

    En effet, je souhaiterais que le département de l'offre inscrit dans la base soit automatiquement sélectionné au chargement de la page, au même titre de l'intitulé du poste ou le descriptif de l'offre s'affichent dans un input...

    J'ai une méthode pour le faire, mais il faudrait que je test chaque ligne du select, c'est ce que j'ai fait pour mon type de contrat (j'ai pas trop de lignes), mais là, ça risque d'être long...

    Si vous aviez une méthode rapide à me proposer, je suis preneur !!

    Merci d'avance !

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Il faut que tu fasses une boucle, en utilisant comme valeur et intitulé du select les valeurs prises dans une variable tableau.
    Comme cela, tu vérifies juste dans ta boucle si le département était déjà sélectionné, et tu ajoutes alors selected="selected".
    Au passage, cela permet aussi de réafficher facilement le formulaire en cas d'erreur de saisie, tout en concervant les informations déjà saisies.

  3. #3
    Membre actif Avatar de glloq8
    Inscrit en
    Novembre 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Novembre 2002
    Messages : 298
    Points : 255
    Points
    255
    Par défaut
    Merci, mais tu aurais un exemple ??

    Je demande pas le travail prémaché, mais une aide pour faire cela... j'y connais pas grand chose.

    Merci d'avance !

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Exemple de code :
    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
     
    // $depts contient en clef l'id du dpt, en valeur le nom
    // je ne vais pas les indiquer tous...
    $depts= array ("01" => "Ain", "02" = "Aisne");
     
    // début du form
    echo '<form id="changement_depts" method="post" action="ton_fichier.php">';
    // début du select
    echo '<p><label for="choix_depts"  title="Cliquez sur le département">Département&nbsp;:&nbsp;</label>';
    echo '<select id="choix_depts" size="5">';
     
    // boucle sur $depts pour les afficher dans le SELECT
    foreach ($depts as $id_dept => $nom_dept)
      // début de l'affichage  
      {echo '<option value="'.$id_dept.'"';
      // ajout du selected si le département est déjà sélectionné
      // la variable $id_dept_select contient l'id du dpt sélectionné ;o))
      if ($id_dept_select==$id_dept)
        {echo 'selected="selected"';}
      echo '>'.$nom_dept.'</option>';
      }
     
    // fin du select
    echo '</select>';
     
    // fin du form
    echo '</form>';
    Tu me dis si ça marche ?

  5. #5
    Membre actif Avatar de glloq8
    Inscrit en
    Novembre 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Novembre 2002
    Messages : 298
    Points : 255
    Points
    255
    Par défaut
    J'ai essayé de l'adapter à mon code, mais je galère...

    en fait, ce que j'ai fait, c'est que j'ai un select tout con, avec tous les départements en option (en dur).

    Quand je valide mon formulaire, il m'inscrit l'offre d'emploi créée dans la base de données avec un champs "departement".
    La valeur de ce champs est le nom du département (ex : Ain ou Nord).

    Quand j'ouvre ma page de modif, c'est le nom du département qui est retourné, et c'est avec ce nom que je voudrais sélectionner la bonne option de mon select...

  6. #6
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    On peut voir le code du select généré ?

  7. #7
    Membre actif Avatar de glloq8
    Inscrit en
    Novembre 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Novembre 2002
    Messages : 298
    Points : 255
    Points
    255
    Par défaut
    Que veux-tu dire par généré ??

    voici le select que j'ai dans ma page création :

    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
    <select name="dep" class="formulaire" style="width:200px"> 
    				<option value="Ain">01 - Ain</option>
    				<option value="Aisne">02 - Aisne</option>
    				<option value="Allier">03 - Allier</option>
    				<option value="Alpes de Haute Provence">04 - Alpes de Haute Provence</option>
    				<option value="Hautes Alpes">05 - Hautes Alpes</option>
    				<option value="Alpes Maritimes">06 - Alpes Maritimes</option>
    				<option value="Ardèche">07 - Ardèche</option>
    				<option value="Ardennes">08 - Ardennes</option>
    				<option value="Ariège">09 - Ariège</option>
    				<option value="Aube">10 - Aube</option>
    				<option value="Aude">11 - Aude</option>
    				<option value="Aveyron">12 - Aveyron</option>
    				<option value="Bouches du Rhône">13 - Bouches du Rhône</option>
    				<option value="Calvados">14 - Calvados </option>
    				<option value="Cantal">15 - Cantal</option>
    				<option value="Charente">16 - Charente </option>
    				<option value="Charente Maritime">17 - Charente Maritime </option>
    				<option value="Cher">18 - Cher</option>
    				<option value="Corrèze">19 - Corrèze </option>
    				<option value="Corse du Sud">2A - Corse du Sud </option>
    				<option value="Haute Corse">2B - Haute-Corse </option>
    				<option value="Côte d'or">21 - Côte d'Or </option>
    				<option value="Côtes d'Armor">22 - Côtes d'Armor </option>
    				<option value="Creuse">23 - Creuse</option>
    				<option value="Dordogne24">24 - Dordogne </option>
    				<option value="Doubs">25 - Doubs</option>
    				<option value="Drôme">26 - Drôme </option>
    				<option value="Eure">27 - Eure </option>
    				<option value="Eure et Loir">28 - Eure et Loir</option>
    				<option value="Finistère">29 - Finistère </option>
    				<option value="Gard">30 - Gard </option>
    				<option value="Haute Garonne">31 - Haute Garonne </option>
    				<option value="Gers">32 - Gers </option>
    				<option value="Gironde">33 - Gironde </option>
    				<option value="Hérault">34 - Hérault </option>
    				<option value="Ille et Vilaine">35 - Ille et Vilaine </option>
    				<option value="Indre">36 - Indre </option>
    				<option value="Indre et Loire">37 - Indre et Loire </option>
    				<option value="Isère">38 - Isère </option>
    				<option value="Jura">39 - Jura </option>
    				<option value="Landes">40 - Landes</option>
    				<option value="Loir et Cher">41 - Loir et Cher </option>
    				<option value="Loire">42 - Loire </option>
    				<option value="Haute Loire">43 - Haute Loire</option>
    				<option value="Loire Atlantique">44 - Loire Atlantique </option>
    				<option value="Loiret">45 - Loiret </option>
    				<option value="Lot">46 - Lot </option>
    				<option value="Lot et Garonne">47 - Lot et Garonne</option>
    				<option value="Lozère">48 - Lozère</option>
    				<option value="Maine et Loire">49 - Maine et Loire </option>
    				<option value="Manche">50 - Manche</option>
    				<option value="Marne">51 - Marne</option>
    				<option value="Haute Marne">52 - Haute Marne </option>
    				<option value="Mayenne">53 - Mayenne </option>
    				<option value="Meurthe et Moselle">54 - Meurthe et Moselle </option>
    				<option value="Meuse">55 - Meuse </option>
    				<option value="Morbihan">56 - Morbihan </option>
    				<option value="Moselle">57 - Moselle </option>
    				<option value="Nièvre">58 - Nièvre </option>
    				<option value="Nord">59 - Nord </option>
    				<option value="Oise">60 - Oise </option>
    				<option value="Orne">61 - Orne </option>
    				<option value="Pas de Calais">62 - Pas de Calais</option>
    				<option value="Puy de Dôme">63 - Puy de Dôme </option>
    				<option value="Pyrénées Atlantiques">64 - Pyrénées Atlantiques </option>
    				<option value="Hautes Pyrénées">65 - Hautes Pyrénées </option>
    				<option value="Pyrénées Orientales">66 - Pyrénées Orientales </option>
    				<option value="Bas Rhin">67 - Bas Rhin </option>
    				<option value="Haut Rhin">68 - Haut Rhin </option>
    				<option value="Rhône">69 - Rhône </option>
    				<option value="Haute Saône">70 - Haute Saône </option>
    				<option value="Saône et Loire">71 - Saône et Loire </option>
    				<option value="Sarthe">72 - Sarthe </option>
    				<option value="Savoie">73 - Savoie </option>
    				<option value="Haute Savoie">74 - Haute Savoie </option>
    				<option value="Paris">75 - Paris </option>
    				<option value="Seine Maritime">76 - Seine Maritime </option>
    				<option value="Seine et Marne">77 - Seine et Marne </option>
    				<option value="Yvelines">78 - Yvelines </option>
    				<option value="Deux Sèvres">79 - Deux Sèvres </option>
    				<option value="Somme">80 - Somme </option>
    				<option value="Tarn">81 - Tarn </option>
    				<option value="Tarn et Garonne">82 - Tarn et Garonne </option>
    				<option value="Var">83 - Var </option>
    				<option value="Vaucluse">84 - Vaucluse </option>
    				<option value="Vendée">85 - Vendée </option>
    				<option value="Vienne">86 - Vienne </option>
    				<option value="Haute Vienne">87 - Haute Vienne </option>
    				<option value="Vosges">88 - Vosges </option>
    				<option value="Yonne">89 - Yonne </option>
    				<option value="Territoire de Belfort">90 - Territoire de Belfort </option>
    				<option value="Essonne">91 - Essonne </option>
    				<option value="Hauts de Seine">92 - Hauts de Seine </option>
    				<option value="Seine Saint Denis">93 - Seine Saint Denis </option>
    				<option value="Val de Marne">94 - Val de Marne </option>
    				<option value="Val d'Oise">95 - Val d'Oise </option>
    			</select>
    celui de la page modification, c'est celui là que je cherche à faire !

  8. #8
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Quel est le code qui produit ce select ?

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Citation Envoyé par glloq8
    Quand j'ouvre ma page de modif, c'est le nom du département qui est retourné, et c'est avec ce nom que je voudrais sélectionner la bonne option de mon select...
    Dans ce cas, il suffit de remplacer dans le tableau $depts (dans mon exemple) l'id du dpt par son nom tel qu'il est entré dans ta base.

    Au passage, je pense qu'il serait plus "économique" de stocker de numéro du dépt (2 ou 3 chiffres max) dans la base plutôt que le nom. Tu aurais en plus moins de risques de doublons à cause d'une différence de casse ('Gironde', 'GIRONDE' et 'gironde' pourraient être considérés comme des dpts différents).

  10. #10
    Membre actif Avatar de glloq8
    Inscrit en
    Novembre 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Novembre 2002
    Messages : 298
    Points : 255
    Points
    255
    Par défaut
    C'est ça, j'ai ça dans mon code, tout simplement, en dur !!

  11. #11
    Membre actif Avatar de glloq8
    Inscrit en
    Novembre 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Novembre 2002
    Messages : 298
    Points : 255
    Points
    255
    Par défaut
    Citation Envoyé par vg33
    Citation Envoyé par glloq8
    Quand j'ouvre ma page de modif, c'est le nom du département qui est retourné, et c'est avec ce nom que je voudrais sélectionner la bonne option de mon select...
    Dans ce cas, il suffit de remplacer dans le tableau $depts (dans mon exemple) l'id du dpt par son nom tel qu'il est entré dans ta base.

    Au passage, je pense qu'il serait plus "économique" de stocker de numéro du dépt (2 ou 3 chiffres max) dans la base plutôt que le nom. Tu aurais en plus moins de risques de doublons à cause d'une différence de casse ('Gironde', 'GIRONDE' et 'gironde' pourraient être considérés comme des dpts différents).
    J'ai mis le snoms des depts en value car comme ça, ça affiche directement le nom dans la visualisation de l'offre... ça m'évite de refaire un traitement après, pour passer du n° au nom !

  12. #12
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Citation Envoyé par glloq8

    J'ai mis le snoms des depts en value car comme ça, ça affiche directement le nom dans la visualisation de l'offre... ça m'évite de refaire un traitement après, pour passer du n° au nom !
    Ok... même si le passage du n° au nom prend environ 5 lignes de code

    Je ne comprend cependant pas le problème avec mon exemple.
    Je pense que la seule façon simple de gérer la présélection d'une longue liste de select est de passer par une boucle. Mais je me trompe peut-être...

  13. #13
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Alors deux solutions :
    Soit tu génères le formulaire via php (et tu mets l'attributs selected="selected" où tu veux),
    Soit tu passes par javascript

    Je vote pour la solution 1

  14. #14
    Membre actif Avatar de glloq8
    Inscrit en
    Novembre 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Novembre 2002
    Messages : 298
    Points : 255
    Points
    255
    Par défaut
    C'est que je me suis aussi résolu à faire...

    Mais en bidouillant dans le code donné par vg33, j'ai réussi...

    Bon, faut que je réécrive tous les départements dans le tableau $depts mais ça marche...

  15. #15
    Membre actif Avatar de glloq8
    Inscrit en
    Novembre 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Novembre 2002
    Messages : 298
    Points : 255
    Points
    255
    Par défaut
    Par contre, j'ai du ajouter une ligne dans le code, car $id_dept_select n'existait pas, donc j'avais une erreur !!

    voici le nouveau code modifié et qui marche :

    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
     
    $depts= array ("Ain","Aisne","Nord"); 			
    // début du form 
    echo '<form id="changement_depts" method="post" action="ton_fichier.php">'; 
    // début du select 
    echo '<p><label for="choix_depts"  title="Cliquez sur le département">Département&nbsp;:&nbsp;</label>'; 
    echo '<select id="choix_depts">'; 
     
    // boucle sur $depts pour les afficher dans le SELECT 
    foreach ($depts as $id_dept => $nom_dept) 
      // début de l'affichage  
      {echo '<option value="'.$id_dept.'"'; 
      // ajout du selected si le département est déjà sélectionné 
      // la variable $id_dept_select contient l'id du dpt sélectionné ;o)) 
      $id_dept_select = $departement;
      if ($id_dept_select == $id_dept) 
        {echo 'selected="selected"';} 
      echo '>'.$nom_dept.'</option>'; 
      } 
     
    // fin du select 
    echo '</select>';

  16. #16
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Attention ! Ton tableau $depts doit être à 2 dimensions, avec en clef l'id du dpt tel qu'entré dans ta base, et en valeur le nom du dpt.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $depts= array ("Ain" => "01 - Ain", "Aisne" => "02 - Aisne", "Nord" => "59 - Nord");
    De plus, tu peux remplacer directement la variable $id_dept_select par la tienne $departement.

  17. #17
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Ca fait une dimension ça....

  18. #18
    Membre actif Avatar de glloq8
    Inscrit en
    Novembre 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Novembre 2002
    Messages : 298
    Points : 255
    Points
    255
    Par défaut
    Ne vous battez pas s'il vous plai !!!

    Après, on dira que c'est de ma faute !!!

    Non, sinon, je viens de rentrer tous les dép dans ma base, ça sera plus simple de sélectionner celui que je veux, je l'ai déjà fait il y a quelque temps pour autre chose que les départements, mais ça marchait quand même !!

    Merci pour votre aide !!

  19. #19
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Citation Envoyé par Mr N.
    Ca fait une dimension ça....
    Oui, erreur de syntaxe
    Je voulais dire que les clefs doivent correspondre aux valeurs de la base, et non pas, comme dans le code cité, être des valeurs numériques auto incrémentées.

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

Discussions similaires

  1. Problème avec un "select multiple" et POST
    Par crazydiver_e2 dans le forum Langage
    Réponses: 2
    Dernier message: 09/06/2006, 15h54
  2. problème avec un select max
    Par bobic dans le forum Oracle
    Réponses: 7
    Dernier message: 14/11/2005, 11h22
  3. []Problème avec un "Select Case" : Instructions et..
    Par Olun dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 07/09/2005, 13h32
  4. Problème avec un SELECT
    Par birkoss dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/08/2005, 19h04
  5. [struts][JSP][select] problème avec le select
    Par redge_touch dans le forum Struts 1
    Réponses: 4
    Dernier message: 14/01/2004, 10h05

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