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 :

Lier deux listes


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé Avatar de batoule80
    Inscrit en
    Février 2007
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 116
    Par défaut Lier deux listes
    bonjour,

    mon problème a été traité dans certains forums mais je ne trouve pas de solution

    j'ai deux listes : la première affiche les types d'incidents c'est à dire :

    1.problèmes liés au réseau
    2.problème software et système.
    3.problème hardware des équipements.
    4.Demande d’achat de matériel ou de consommable.

    la deuxième liste consite en l'affichage des éléments liés à chaque type :

    en selectionnant le type réseau dans la première liste, les éléments correspondants à ce meme type seront affichés :

    1. coupure de la liaison.
    2.adressage IP.
    3.priblème VPN.
    4 .... etc

    voici ces quelques lignes de codes que j'ai developpé :

    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
     
     <?php
    				   $result = db_connect();
                      if (!$result)
                      die(mysql_error());
     
         // selection de la base de données 
        $select  = mysql_select_db($dbName,$result);
       if (!$select)
       die(mysql_error());
                      ?>
    				   <? $Result=mysql_query("select * from hd_type_incident")or die(mysql_error());
     
    	         $nb = mysql_num_rows($Result);  
                 $ListDir = '<option value="0">Type incident</option>'; 
    while ($tmpObject = mysql_fetch_object($Result)) //tant qu'il y a des types d'incidents, on les affiche
    {
       $ListDir .= '<option value="'.$tmpObject->id_type_incident.'">'.$tmpObject->type_incident.'</option>';
    }
    ?>
    				  <td width="15%" >
    				     <select name="fk_type_incident" id="fk_type_incident">
                            <?=$ListDir?>
                          </select>				   
                          	 <? mysql_close(); ?>  				  </td>
     
     
    					 <?php
    				   $result = db_connect();
                      if (!$result)
                      die(mysql_error());
     
         // selection de la base de données 
        $select  = mysql_select_db($dbName,$result);
       if (!$select)
       die(mysql_error());
                      ?>  
     
     
    				   <? $Res=mysql_query("select * from hd_sous_type_incident where fk_type_incident= $fk_type_incident")or die(mysql_error());
     
    	         $nb1 = mysql_num_rows($Res);  
                 $ListDiv = '<option value="0">Sous type incident</option>'; 
    while ($tmpObject = mysql_fetch_object($Res)) //tant qu'il y a des sous types d'incidents, on les affiche
    {
       $ListDiv .= '<option value="'.$tmpObject->id_sous_type_incident.'">'.$tmpObject-> sous_type_incident.'</option>';
    }
    ?>					  
    		          <td >
    				  <select name="fk_sous_type_incident" id="fk_sous_type_incident">
                            <?=$ListDiv?>
                          </select> <? mysql_close(); ?>

    dans la deuxième requète j'ai tenté de récupérer la valeur du select de la première requète

    voici mes tables :

    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
     
    CREATE TABLE `hd_type_incident` (
      `id_type_incident` int(11) NOT NULL auto_increment PRIMARY KEY,
      `type_incident` text NOT NULL, 
      `description` text NOT NULL,
      `fk_user` int(11),
       FOREIGN KEY(fk_user) REFERENCES hd_utilisateur(id_user) ON DELETE CASCADE ON UPDATE CASCADE,
       INDEX(fk_user)
    )TYPE=INNODB;";  
     
     
    CREATE TABLE `hd_sous_type_incident` (
      `id_sous_type_incident` int(11) NOT NULL auto_increment PRIMARY KEY,
      `sous_type_incident` text NOT NULL,
      `description` text NOT NULL,
      `fk_type_incident` int(11),
       FOREIGN KEY(fk_type_incident) REFERENCES hd_type_incident(id_type_incident) ON DELETE CASCADE ON   UPDATE CASCADE,
       INDEX(fk_type_incident)
     
    )TYPE=INNODB;"; 
     
    CREATE TABLE `hd_incident` (
      `id_incident` int(11) NOT NULL auto_increment PRIMARY KEY,
      `fk_type_incident` int(11) NOT NULL default '',
      `fk_sous_type_incident` int(11) NOT NULL default '',
      `fk_statut` int(11),
      `fk_users` int(11),
      `fk_user` int(11),
      `Date_creation` date,   
      `Date_échéance` date, 
      `Date_fermeture` date,
      `objet` varchar(200) NOT NULL default '',
      `message` varchar(200) NOT NULL,
      FOREIGN KEY(fk_type_incident) REFERENCES hd_type_incident(id_type_incident) ON DELETE CASCADE ON UPDATE CASCADE,
       FOREIGN KEY(fk_sous_type_incident) REFERENCES hd_sous_type_incident(id_sous_type_incident) ON DELETE CASCADE ON UPDATE CASCADE,
      FOREIGN KEY(fk_statut) REFERENCES hd_statut(id_statut) ON DELETE CASCADE ON UPDATE CASCADE,
      FOREIGN KEY(fk_user) REFERENCES hd_utilisateur(id_user) ON DELETE CASCADE ON UPDATE CASCADE,
     FOREIGN KEY(fk_users) REFERENCES hd_utilisateur(id_user) ON DELETE CASCADE ON UPDATE CASCADE,
      INDEX(fk_type_incident),
      INDEX(fk_user), 
      INDEX(fk_users),
      INDEX(fk_sous_type_incident),
      INDEX(fk_statut)
     
     
    )TYPE=INNODB;";
    les erreurs affichées :

    Erreur de syntaxe près de '' à la ligne 1 , j'ignore de quelle ligne il s'agit !!!

    et il n'ya que deux champs qui sont affichés : type incident et l'utilsateur qui a envoyé l'incident sous forme de listes , mais en cliquant une deuxième fois sur le bouton envoyer ya tout qui s'affiche mais impossible de lier les deux listes type incident et sous types incident " il n' ya q'un seul sous type qui s'affiche .

    autre question pensez vous qu'à chaque requète select, il faut se connecter à la base de données et selectionner la table et fermer la base ??

    ps: je ne veut pas utiliser du Javascript.

    voilà j'espère etre bien claire et merci pour vos suggestions.
    cordialment

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    Bonjour,

    Ma réponse est totalement à côté de la question, mais tu devrais commencer par revoir ton modèle de données. En effet, et sans entrer dans les détails, la table 'sous_type' ne sert à rien. Il suffit d'indiquer la clé du père pour les sous_types :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE `hd_type_incident` (
      `id_type_incident` int(11) NOT NULL auto_increment PRIMARY KEY,
      `type_incident` text NOT NULL, 
      `description` text NOT NULL,
      `id_pere` int(11),
      `fk_user` int(11),
       FOREIGN KEY(fk_user) REFERENCES hd_utilisateur(id_user) ON DELETE CASCADE ON UPDATE CASCADE,
       INDEX(fk_user)
    )TYPE=INNODB;";
    Ce qui donnerai, pour l'exemple que tu cites :
    id type id_pere
    1 problèmes liés au réseau 0
    2 problème software et système 0
    3 problème hardware des équipements 0
    4 Demande d’achat de matériel ou de consommable 0
    5 coupure de la liaison 1
    6 adressage IP 1
    7 priblème VPN 1
    Mais il y a aussi cette structure de données :
    http://sqlpro.developpez.com/cours/arborescence/

    Quant à la colonne 'fk_user', je ne vois pas ce qu'elle fait dans cette table.

  3. #3
    Membre confirmé Avatar de batoule80
    Inscrit en
    Février 2007
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 116
    Par défaut
    Citation Envoyé par jeca Voir le message
    Bonjour,

    Ma réponse est totalement à côté de la question, mais tu devrais commencer par revoir ton modèle de données. En effet, et sans entrer dans les détails, la table 'sous_type' ne sert à rien. Il suffit d'indiquer la clé du père pour les sous_types :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE `hd_type_incident` (
      `id_type_incident` int(11) NOT NULL auto_increment PRIMARY KEY,
      `type_incident` text NOT NULL, 
      `description` text NOT NULL,
      `id_pere` int(11),
      `fk_user` int(11),
       FOREIGN KEY(fk_user) REFERENCES hd_utilisateur(id_user) ON DELETE CASCADE ON UPDATE CASCADE,
       INDEX(fk_user)
    )TYPE=INNODB;";
    Ce qui donnerai, pour l'exemple que tu cites :

    Mais il y a aussi cette structure de données :
    http://sqlpro.developpez.com/cours/arborescence/

    Quant à la colonne 'fk_user', je ne vois pas ce qu'elle fait dans cette table.
    bonjour jeca,

    merci pour ta réponse

    pour etre franche je ne vois pas comment je vais changer mon modèle de données , je n'arrive pas à saisir ta solution

    en ce qui concerne 'fk_user' , il s'agit d'un opérateur helpdesk et pas d'un utilisateur ordinaire , dans la table hd-utilisateur il ya un champs 'opérateur helpdesk' qui prend la valeur oui ou non

  4. #4
    Membre confirmé Avatar de batoule80
    Inscrit en
    Février 2007
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 116
    Par défaut
    je crois que je vais voir du coté d'ajax , enfin je n'ai pas trop le choix

Discussions similaires

  1. lier deux liste deroulante dans un formulaire flash
    Par popogendarme dans le forum Coldfusion
    Réponses: 2
    Dernier message: 19/07/2007, 21h15
  2. [AJAX] lier deux listes déroulantes alimenté par une base de données (Mysql)
    Par arnaudperfect dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/04/2007, 01h06
  3. [Javascript] Comment lier deux liste de sélection
    Par orleans dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/04/2006, 07h12
  4. [PHP-JS] Lier deux listes déroulantes
    Par budiste dans le forum Langage
    Réponses: 6
    Dernier message: 15/11/2005, 15h36
  5. [WD5.5] Lier deux listes déroulantes
    Par grellierj dans le forum WinDev
    Réponses: 7
    Dernier message: 11/10/2005, 17h33

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