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 déroulante à partir de la base de données


Sujet :

PHP & Base de données

Vue hybride

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 39
    Par défaut Liste déroulante à partir de la base de données
    Bonjour,

    je cherche à faire une liste déroulante sur un script php, ce que j'ai plus ou moins réussi à faire, par contre les données de ma BDD ne sont pas très clair...
    Voici la requête posté par phpmyadmin


    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
    CREATE TABLE `commune` (
      `id` int(10) NOT NULL default NULL,
      `nom` varchar(30) NOT NULL default '',
      `codepostal` varchar(5) default NULL,
      `defaut` char(3) default NULL,
      PRIMARY KEY  (`id`)
    ) TYPE=MyISAM AUTO_INCREMENT=6 ;
     
    #
    # Contenu de la table `commune`
    #
    INSERT INTO `commune` (`id`, `nom`, `codepostal`, `defaut`) VALUES (1, 'Anstaing', '', 'oui'),
    (2, 'Baisieux', '', 'non'),
    (3, 'Chéreng', '', 'non'),
    (4, 'Comines', '', 'non'),
    (5, 'Leers', '59115', 'non');


    le problème: Lorsque je saisie une commune, ce n'est pas la commune qui est affiché mais l'identifiant, de plus lorsque je actualiser ma page il m'enregistre sans cesse le dernier saisie.

    Je ne sais pas si j'ai été très clair.
    Merci par avance de votre aide.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 52
    Par défaut
    Salut

    Les données de la BDD sont claires. Tu as un identifiant unique autoincrémenté, le nom de la commune, le code postal et "defaut" doit surement servir à afficher la commune par défaut dans ta liste déroulante.

    Tu peux nous envoyer le script que tu utilises pour faire ta liste déroulante ?

    Voici le code d'une de mes liste déroulante, si ça peut t'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <p>
    	<label for='pays' >Pays</label>
    	<select name='pays' id='pays'>
    		<option value=0 >Sélectionner un pays</option>
    		<option value=1 >Afghanistan</option>
    		<option value=2 >Albania</option>
    		<option value=3 >Algeria</option>
    		<option value=4 >Andorra</option>
    		<option value=5 >Angola</option>
    	</select>
    </p>
    En gros, j'affiche le nom du pays, mais la valeur de l'option, c'est son identifiant.

    Ensuite, dans ton code PHP, quand tu créé ta liste déroulante, pour chaque élément de ton option, il faut que tu testes si celui-ci est celui que tu viens de poster, auquel cas, tu affiches "selected" dans l'option.

    Tu récupères l'identifiant du pays que tu viens d'entrer avec mysql_insert_id()

    Pour mon cas, ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $req = mysql_query("SELECT pays_id, pays_nom FROM pays ORDER BY pays_nom");
    while ($result = mysql_fetch_object)
    {
    ?><option value=<?php echo $result->pays_id; if($result->pays_id == $dernier_element) { echo 'selected'; } ?> ><?php echo $result->pays_nom; ?></option><?php
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 39
    Par défaut
    Tout d'abord merci d'avoir pris le temps de me repondre.

    Voici le code du script.

    Encore merci.

    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
     
    <?php
    //============GESTION DES COMMUNES APPELANTES ==========
     
    //------------------------------------------------------------------
    //    Fonction qui affiche toutes les communes appelantes
     
    function affiche_liste_commune()
    {
      global $conn ;
      global $redirect ;
      global $action ;
      global $choix ;
      global $footer_msg ;
      $barre_bouton = Barre_de_boutons_BO("","","Retour");  
     
      $sql = "SELECT s.id, s.nom, s.defaut FROM commune s ORDER BY 2" ;
      $res = $conn->Execute($sql) ;
      if($conn->ErrorNo() != 0)
      {
        return ($conn->ErrorMsg()) ;
      }
      else
      {
        echo "<CENTER>" ;
        echo "<H2>Liste des communes appelantes :</H2>" ;
        echo "<A HREF=\"index.php?action=administrer.affiche_formulaire_commune\">Ajouter</A>" ;
        echo "<BR><BR>" ;
        echo "<TABLE class=\"RESULTAT\"><TR><TH>Nom</TH><TH>par d&eacute;faut<br/>dans la liste</TH><TH colspan=\"2\">Actions</TH></TR>" ;
        while (!$res->EOF)
        {
    	  if ($res->fields[2] == "oui" ) { $class_defval = " class='default_value'"; }
          else {  $class_defval ="";  }
          echo "<TR>
                  <TD>".$res->fields[1]."</TD><TD align=center".$class_defval.">".$res->fields[2]."</TD><TD>&nbsp;</TD>
                  <TD align=center><A HREF=index.php?action=administrer.supprime_commune&id=".$res->fields[0]."&choix=".$choix."><IMG SRC=\"images/delete.gif\" border=0></A></TD>
                </TR>" ;
          $res->MoveNext() ;
        }
        echo "</TABLE><br><br>" ;
    	echo $barre_bouton;
        echo "</CENTER>" ;
      }
    }
     
     
    //------------------------------------------------------------------
    //    Fonction qui affiche le formulaire de saisie
    //    des données de destination des appels par défaut
     
    function affiche_formulaire_commune($p_nom_commun="", $p_defaut="")
    {
      $barre_bouton = Barre_de_boutons_BO("Insérer","Effacer","Retour");  
      $menu_html1 = ListeDeChoix("SELECT distinct 'oui', 'oui' FROM commune union SELECT distinct 'non', 'non' FROM commune order by 1","p_defaut", $p_defaut) ;
      $etoile = chpobli();
     
      $html = <<<END
    
      <SCRIPT LANGUAGE="JAVASCRIPT">
        function verifie_formulaire()
        {
          if (document.AjoutStruct.p_nom_struct.value == "" ) {alert ('Le champ "nom" est vide !'); document.AjoutStruct.p_nom_struct.focus(); return false;}
    	    return true ;
        }
      </SCRIPT>
    
    
        <FORM method="GET" name="AjoutCommun" onSubmit="return verifie_formulaire()">
         <INPUT TYPE="hidden" NAME="action" VALUE="administrer.inserer_commune">
         <INPUT TYPE="hidden" NAME="choix" VALUE="0">
          <H2>Veuillez saisir ou modifier la commune appelante :</H2>
    
          <TABLE class="RESULTAT" align="center">
            <TR>
              <TD>nom$etoile</TD>
              <TD><INPUT type="text" name="p_nom_commune" value="$p_nom_commune"></TD>
            </TR>
            <TR>
              <TD>sélectionner cette commune par défaut<br/> dans le formulaire de prise d'appel</TD>
              <TD>$menu_html1</TD>
            </TR>        
          </TABLE>
          <BR>
          <CENTER>
            $barre_bouton
          </CENTER>
        </FORM>
    END;
     
    return(array($html, null)) ;
    }
     
     
    //------------------------------------------------------------------
    //    Fonction qui insère une nouvelle commune appelante 
     
    function inserer_commune($p_nom,$p_defaut)
    {
      global $conn ;
      global $redirect ;
      global $action ;
      global $footer_msg ;
     
      // si p_defaut = Oui, alors on met tous les autres enregistrements à "Non"
      if ($p_defaut == 'oui' ) 
      {
      	$sql = "UPDATE commune set defaut = 'non'";
      	$res = $conn->Execute($sql) ;
      }
      $sql = "INSERT INTO commune ( nom, defaut ) ".
              "VALUES (".$conn->qstr($p_nom).",".$conn->qstr($p_defaut).")" ;
      $res = $conn->Execute($sql) ;
     
      if ($res == true)
      {
        $footer_msg = "Une commune appelante a bien &eacute;t&eacute; ins&eacute;r&eacute;e dans la base" ;
      }
      else
      {
         $footer_msg = "Il y a eu un probl&egrave;me lors de l'insertion dans la base" ;
      }
      $redirect = true ;
      $action = "administrer.choix" ;
    }
     
     
     
    //------------------------------------------------------------------
    //    Fonction qui détruit une commune appelante
     
    function supprime_commune()
    {
      global $conn ;
      global $redirect ;
      global $action ;
      global $footer_msg ;
     
      $sql = "DELETE FROM commune WHERE id=".$_REQUEST["id"] ;
      $res = $conn->Execute($sql) ;
      if ($res==true)
      {
        $footer_msg = "La commune appelante a bien &eacute;te d&eacute;truite de la base" ;
      }
      else
      {
        $footer_msg = "Il y a eu un probl&eagrave;me lors de la suppression : ".$conn->ErrorMsg() ;
      }
      $redirect = true ;
      $action = "administrer.choix" ;
    }
     
    ?>

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 52
    Par défaut
    J'ai mal compris, je pensais qu'il s'agissait d'une liste déroulante. Autant pour moi.

    Je pense que tu as fait copier / coller de ton code. Tu as oublié un e à la fin de cette variable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function affiche_formulaire_commune($p_nom_commun="", $p_defaut="")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <TD><INPUT type="text" name="p_nom_commune" value="$p_nom_commune"></TD>
    Quand tu actualises ta page, c'est normal qu'il enregistre le dernier que tu as saisi. En fait, tu entres le nom d'une commune, et comme ton formulaire est en GET, tu as une URL du style "index.php?p_commune=commune". Essaie plutôt avec un formulaire en POST.

    Pour l'histoire de l'identifiant, je ne vois pas pour l'instant

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/05/2015, 12h42
  2. Créer une liste déroulante à partir d'une base de données
    Par shaiyajoueur dans le forum Android
    Réponses: 2
    Dernier message: 13/12/2012, 13h33
  3. Réponses: 3
    Dernier message: 22/03/2009, 17h47
  4. Réponses: 11
    Dernier message: 09/03/2009, 12h47
  5. Charger une liste déroulante à partir d'une base de donnée
    Par mr_simon dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 04/07/2007, 08h32

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