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 :

Récuperer le clé étrangere d'une liste déroulante


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 141
    Points : 37
    Points
    37
    Par défaut Récuperer le clé étrangere d'une liste déroulante
    Bonjour,
    j'ai 3 tables:
    categorie(Id, Nom)
    sousCategorie(Id, Nom, IdCategorie)
    Document(Id, Description, IdCatégorie)
    j'ai essayé de faire affiché la liste des sous catégories dans une liste déroulante(<select>)
    et je veux afficher la liste des documents selon l'id de catégorie que je devrais le récupéré à partir de la liste déroulante ?

    comment je peux récupérer l'id de IdCategorie de la table souscatégorie de la liste déroulante pour afficher ma liste des documents

    Rq:j'ai travaillé avec ce tutorial
    http://siddh.developpez.com/articles/ajax/#LIV-A

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    t'aurais pas un petit bout de code à grignoter ?

  3. #3
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Par rapport au tuto que tu donne, la différence c'est que de ton coté il y a 1 niveau supplémentaire.
    Pourtant, le nombre de liste liées entre elles importe peu, la démarche reste la même.
    1/ On choisi une catégorie
    2/ On récupère l'ID de la catégorie pour lister les éléments de la sous-catégorie

    3/ On choisi une sous-catégorie
    4/ On récupère l'ID de la sous-catérorie pour lister les éléments de sous-sous-catégorie

    ... etc ...

    n1/ On récupère l'ID de la n-sous-caterorie pour lister les document liés.



    Une autre technique qui dans ton cas pourrait faire affaire, serait de proposer une seule liste (1 select) rassemblant les catégories et sous-catégories en exploitant ce qu'offre nativement le HTML.
    En somme, une liste de sous-catégories classées par groupes de catégories.
    Les groupes : <select><optgroup><option>
    Un exemple du comment cela se fait coté HTML : Balise OPTGROUP

    Etant donné que tu n'auras qu'une seule liste d'options (les IDs des sous-catégories), suffit de suivre le tuto que tu mis.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 141
    Points : 37
    Points
    37
    Par défaut
    dans la premiere page: je récupere tous les sous catégories dans une liste déroulante

    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
     
    <script type='text/javascript'>
     
    			function getXhr(){
                                    var xhr = null; 
    				if(window.XMLHttpRequest) // Firefox et autres
    				   xhr = new XMLHttpRequest(); 
    				else if(window.ActiveXObject){ // Internet Explorer 
    				   try {
    			                xhr = new ActiveXObject("Msxml2.XMLHTTP");
    			            } catch (e) {
    			                xhr = new ActiveXObject("Microsoft.XMLHTTP");
    			            }
    				}
    				else { // XMLHttpRequest non supporté par le navigateur 
    				   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    				   xhr = false; 
    				} 
                                    return xhr;
    			}
     
    			/**
    			* Méthode qui sera appelée sur le click du bouton
    			*/
    			function go(){
    				var xhr = getXhr();
    				// On défini ce qu'on va faire quand on aura la réponse
    				xhr.onreadystatechange = function(){
    					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    					if(xhr.readyState == 4 && xhr.status == 200){
    						leselect = xhr.responseText;
    						//alert(leselect);
    						// On se sert de innerHTML pour rajouter les options a la liste
    						document.getElementById('document').innerHTML = leselect;
    					}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","documentSousCategorie.php",true);
    				// ne pas oublier ça pour le post
    				xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    				// ne pas oublier de poster les arguments
    				// ici, l'id de le sous programme
    				sel = document.getElementById('souscategorie');
    				IdCategorie = sel.options[sel.selectedIndex].value;
    				xhr.send("IdCategorie ="+IdCategorie );
    			}
    		</script>
    <body>
    	  <select name='souscategorie' id='souscategorie' onChange='go()'>
     <option  value='-1'></option>
    				    <?php 
    						mysql_connect("localhost","root","");
    						mysql_select_db("base");
     
    						$query="SELECT * FROM souscategorie  ORDER BY Id";
    						//echo $query;
    						$res = mysql_query($query);
    					    while($row = mysql_fetch_assoc($res)){
     
    						echo "<option value='".$row["Id"]."'>".$row["Nom"]."</option>";
    				}
     
     
    					?>
     
    				  </select>
    	<div id='document' align="center" style='display:inline'>
    				<select name='document'>
    					<option value='-1'></option>
    				</select>
    </body>
    et dans la page documentSousCategorie.php,je veux afficher tous les documents de chaque categorie selon sous categorie
    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
     
    <?php
    	echo "<select name='document'>";
    	if(isset($_POST["Idcategorie"]) or isset($_POST["souscategorie"])){
    	     mysql_connect("localhost","root","");
    	     mysql_select_db("base");
     
     
    		$res = mysql_query("SELECT document.Id,document.Nom FROM document
    inner join categorie ON document.Idcategorie=".$_POST["Idcategorie"]." 
    inner join souscategorie  on categorie.id=('select distinct(Idcategorie) from souscategorie where IdSousCategorie=".$_POST["souscategorie"]."')");
    		while($row = mysql_fetch_assoc($res)){
    			echo "<option value='".$row["Id"]."'>".$row["Nom"]."</option>";
    		}
    	}
    	echo "</select>";
    ?>

  5. #5
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Tu ne respecte pas à la lettre le principe du tuto à mon sens.

    Dans le code du tuto la requête se base sur 1 seul paramètre pour rechercher et lister les livres selon 1 auteur : idAuteur (ajaxLivre.php).

    Dans ton code (documentSousCategorie.php) tu te base sur 2 paramètres en POST : Idcategorie et souscategorie.

    Or, dans ton code Ajax 1 seul paramètres en POST est envoyé à documentSousCategorie.php : IdCategorie
    Le paramètre "souscategorie" ne l'est pas (ou alors cela m'a échappé).


    Petite parenthèse au passage, et au niveau du code Ajax, au lieu de nommer (et transmettre) comme paramètre IdCatégorie, il serait mieux de le nommer IdSousCtegorie.
    Car les Identifiants listés et récupérés par le code Ajax correspondent aux Identifiants de la table sousCatégorie (pas Catégorie).
    Au même titre que les Identifiants dans la table "document" sont liés aux Identifiants de la table sousCatégorie (pas Catégorie).
    Tout cela afin d'éviter tout amalgame sur ces IDs.
    Pour encore éviter tout amalgame, on pourrait nommer cet Identifiant de clé étrangère de la table "Document" IdSousCatégorie (correspondant au champ Id de la table sousCategorie).
    Enfin, tout cela sauf erreur


    Dans la démarche que tu as adopté au départ (1ère page) tu ne tiens pas compte des catégories (1er niveau), tu proposes directement une liste de sous-catégories, toutes sans exceptions, donc peu importe la catégorie.
    J'entends par là que dès le départ il n'y a pas eu une sélection (ou filtre) selon la catégorie.
    Pourquoi pas bien sûr.
    Du coup 1 seul paramètre à renvoyer suffit : l'ID de la sous-catégie pour récupérer les divers document liés à cette sous-catégorie.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 141
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Du coup 1 seul paramètre à renvoyer suffit : l'ID de la sous-catégie pour récupérer les divers document liés à cette sous-catégorie.
    à partir de l'id de la sous catégorie ,je ne peux pas obtenir directement tous les documents car j'ai une jointure entre la table catégorie et document selon idCatégorie
    et ca mon probleme

  7. #7
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    à partir de l'id de la sous catégorie ,je ne peux pas obtenir directement tous les documents car j'ai une jointure entre la table catégorie et document selon idCatégorie
    et ca mon probleme
    La jointure à mon sens ne sert pas à grand chose.

    La jointure servirait tout de même à quelque dans le sens où on souhaite renforcer un peu plus la fiabilité de son code, en somme de proposer une liste de documents liés au paramètre obtenu (l'Id de la sous-catégorie) dans la seule condition que cet Id est bien lié à 1 élément à la table catégorie.

    Pour faire cela simplement tu pourrais exécuter 2 requêtes SQL.
    - La 1ère serait de rechercher l'Id de la catégorie (champ Id de la table Categorie) en se basant sur le paramètre obtenu en POST qui doit être une clé primaire de la table SousCatégorie.

    Si on obtient un résultat (donc un Id de Catégorie), alors cette catégorie existe bien (ou dit autrement : la sous-catégorie est bien liée à une catégorie).
    - La 2ème : On peu donc récupérer les documents liés (champ Id) selon ce même paramètre en POST qui est bel et bien un Id de SousCategorie.


    Essai déjà cela en procédant en 2 temps si c'est ça que tu recherches.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

Discussions similaires

  1. Récuperer la valeur d'une liste déroulante
    Par neuneu1 dans le forum Langage
    Réponses: 10
    Dernier message: 25/11/2008, 09h34
  2. Réponses: 2
    Dernier message: 01/09/2006, 00h02
  3. Réponses: 1
    Dernier message: 20/06/2006, 14h32
  4. Réponses: 12
    Dernier message: 02/05/2006, 19h37
  5. Récuperer le 2eme champ d'une liste déroulante
    Par priest69 dans le forum Access
    Réponses: 2
    Dernier message: 07/09/2005, 19h07

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