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

JavaScript Discussion :

Liaison liste deroulante avec BDD [Fait]


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 51
    Points : 21
    Points
    21
    Par défaut Liaison liste deroulante avec BDD
    Bonjour,

    Je vous expose mon problème:

    en fait, je n'arrive pas a lié le choix d'une liste déroulante a une autre liste déroulante , les deux etant lié a des données inclus dans une base de données.

    Une fonction me gène et je ne la comprend pas, se qui me bloque un peu.

    la fonction en question:

    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
    	var gs_nth = 0;
    	var gs_timeout = 1600;
    	var gs_select = new Array();
    	var gs_timer = new Array();
    	var gs_stor  = new Array();
     
     
    	function mk_select(nom,options,flag)
    	{
    		if (flag)
    		{
    			document.write('<SELECT id="gs_select_' + gs_nth + '" name="' + nom + '"'
    				+ ' style="width:100%"' + ' onkeydown="return gs_inkey(' + gs_nth
    				+ ')">' + options
    				+ '</SELECT>'
    				);
    			gs_select[gs_nth] = null;
    			gs_timer[gs_nth] = null;
    			gs_stor[gs_nth] = "";
    			++gs_nth;
    		}
    		else
    		{
    			document.write(options);
    		}
    	}
     
     
    	function gs_inkey(nth)
    	{
     
    		if (gs_select[nth]==null)
    		gs_select[nth] = document.getElementById("gs_select_"+nth);
     
    		var key = event.keyCode;
     
    		if (key==32
    		|| (key>=48 && key<=57)
    		|| (key>=65 && key<=90))
    		{
    			if (gs_stor[nth].length<3)
    			{
    				var car = String.fromCharCode(key).toUpperCase();
    				gs_stor[nth]+=car;
    				gs_search(nth);
    			}
    			if (gs_timer[nth]!=null) clearTimeout(gs_timer[nth]);
    			gs_timer[nth] = setTimeout('gs_stor['+nth+']=""',gs_timeout);
    			return false;
    		}
     
    		else
    		return true;
     
    	}
     
     
    	function gs_search(nth)
    	{
    		var mem=[-1,-1,-1];
    		var nb = gs_select[nth].length;
    		for (var ith=0; ith<nb; ++ith)
    		{
    			var label = gs_select[nth][ith].innerHTML.toUpperCase();
    			if (gs_stor[nth].substr(0,1)==label.substr(0,1) && mem[0]==-1) mem[0]=ith;
    			if (gs_stor[nth].substr(0,2)==label.substr(0,2) && mem[1]==-1) mem[1]=ith;
    			if (gs_stor[nth].substr(0,3)==label.substr(0,3) && mem[2]==-1) mem[2]=ith;
    		}
    		if (mem[2]>=0) index=mem[2];
    		else if (mem[1]>=0) index=mem[1];
    		else if (mem[0]>=0) index=mem[0];
    		gs_select[nth].selectedIndex = index;
    	}
    L'apel de la fonction mk_select

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          <TD width=150><SPAN class="hide_selection"><SCRIPT language="javascript">mk_select("serv_service[{ligne}]","{serv_service}",1)</SCRIPT></SPAN></TD>
    Jusque la pas de problème , mais lorsque j'essaye de faire intéragir la deuxième box avec la prmière, je me retrouve avec le choix complet des noms, au lieu de n'avoir que ceux qu'il faudrait :s

    appel de la deuxième box

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <TD width=150><SPAN class="hide_selection"><SCRIPT language="javascript">mk_select("serv_nom[{ligne}]","{serv_service}",1)</SCRIPT></SPAN></TD>
    et le lien avec la bdd en php

    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
     
    	/***  Produire la table des services  ***/
    	$max_numero = dernierNumero($courrier);
    	foreach($courrier["attrib"] as $idx=>$serv)
    	if (!isset($serv["delete"]) && $serv["vu"])
    	{
    		$t->set_var(array(
    			"ligne" => $idx,
    			"serv_service" => $dt->selection("libelle",$liste_services,$serv["service"]),
    			"serv_nom" => $dt->selection("nom",$liste_nom,$serv["service"]),
    			"serv_motif"   => $dt->selection("libelle",$liste_motifs,$serv["motif"]),
    			"serv_observ"  => $serv["observ"],
    			"serv_dest"    => $serv["dest"] ? "checked" : "",
    			"serv_copie"   => $serv["copie"] ? "checked" : "",
    			"serv_date_transmis" => $serv["date_transmis"],
    			"serv_date_retour"   => $serv["date_retour"],
    			"serv_numero" => $serv["numero"],
    			"max_numero"  => $max_numero,
    			));
    		$t->parse("serv_table","services",true);
    	}
    Je suis conscient qu'il y'a beaucoup de code, mais ayant chercher pas mal de temp plusieurs solution dont aucune n'a eté efficace ( meme un tutoriel :s), je m'en remet a vous qui m'avait permis de résoudre mes deux précédents problémes.

    Merci d'avance

    Djillian

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 51
    Points : 21
    Points
    21
    Par défaut
    Désolé je l'avait vu mais pas explorer en entier :s:s

    Je vait voir si je peut m'en servir pour l'integrer a l'appli sans trop trop modifier le code de base.

    merci et encore dsl :s

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Avril 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Avril 2006
    Messages : 245
    Points : 239
    Points
    239
    Par défaut
    Dans le même genre, il y a eu une discussion il y a quelque temps qui porte sur ce sujet ...

    http://www.developpez.net/forums/sho...d.php?t=383649

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 51
    Points : 21
    Points
    21
    Par défaut
    Après avoir suivi le cour sur le lien en ajax a la lettre, le fichier test ne fonctionne pas :s

    Comment créer le lien avec une bdd postgres? on remplace bien le mysql_ par pg_ non??

    Escusez moi je suis un peu perdu .

    Fonctionlitbox.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
            echo "<select name='uti_nom'>";
            if(isset($_POST["serv_id"])){
                    pg_connect("http://10.47.16.4/phppgadmin/","reserve","reserve");
                    pg_select_db("courrier_reserve");
                    $res = pg_query("SELECT uti_nom FROM services, serv_util,utilisateurs
                            WHERE services.serv_id=serv_util.jsu_serv_id and serv_util.jsu_uti_id=utilisateurs.uti_id and services.serv_id=".$_POST["serv_id"]."ORDER BY uti_nom";
                    while($row = pg_fetch_assoc($res)){
                            echo "<option value='".$row["uti_nom"]."'</option>";
                    }
            }
            echo "</select>";
    ?>
    test1.php:
    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
    <html>
    	<head>
    		<title>Tutoriel Ajax (XHTML + JavaScript + XML)</title>
    		<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;
    						// On se sert de innerHTML pour rajouter les options a la liste
    						document.getElementById('uti_id').innerHTML = leselect;
    					}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("POST","fonctionlitbox.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 l'auteur
    				sel = document.getElementById('auteur');
    				serv_id = sel.options[sel.selectedIndex].value;
    				xhr.send("serv_id="+serv_id);
    			}
    		</script>
    	</head>
     
    	</head>
    	<body>
    		<form>
    			<fieldset style="width: 500px">
    				<legend>Liste liées</legend>
    				<label>services</label>
    				<select name='services' id='services' onchange='go()'>
    					<option value='-1'>Aucun</option>
    					<?
    						pg_connect(10.47.16.4,"reserve","reserve");
    						pg_select_db("courrier_reserve");
    						$res = pg_query("SELECT * FROM services ORDER BY serv_id");
    						while($row = pg_fetch_assoc($res)){
    							echo "<option value=".$row["serv_id"]."</option>";
    						}
    					?>
    				</select>
    				<label>utilisateurs</label>
    				<div id='utilisateurs' style='display:inline'>
    				<select name='utilisateurs'>
    					<option value='-1'>Choisir un service</option>
    				</select>
    				</div>
    			</fieldset>
    		</form>
    	</body>
    </html>
    Je n'ai malheureusement aucun coix dans mes box, voyez vous une erreur de syntaxe ou autre, le fichier log de apache ne me renvoi aucune erreur :s

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    là ça ne relève pas du tout de javascript mais plutot de php sgdb ...

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 51
    Points : 21
    Points
    21
    Par défaut
    j'arrive pas a cerner l'erreur

    Pourtant la bdd marche dans les autres listbox :s

    H.S: On mais quoi a la place du mot problème dans le titre du post??

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    as tu déja testé coté serveur le contenu du retour de requete ?

    H.S. pour ce qui est du mot "problème" , tout le monde ici pose sa question parcequ'il ou elle àç un problème c'est implicite ...
    Si chaque titre de post comportait le mot problème ...
    les recherches sur le forum étant basées également sur le titre des post, je me demande bine qui mettrait dasn sa recherche le mot problème ... ?

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 51
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    as tu déja testé coté serveur le contenu du retour de requete ?

    H.S. pour ce qui est du mot "problème" , tout le monde ici pose sa question parcequ'il ou elle àç un problème c'est implicite ...
    Si chaque titre de post comportait le mot problème ...
    les recherches sur le forum étant basées également sur le titre des post, je me demande bine qui mettrait dasn sa recherche le mot problème ... ?
    La requète est éxécuté , mais je n'ai pas de résultats

    Je vait travailler la dessus

  10. #10
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 51
    Points : 21
    Points
    21
    Par défaut
    En fait, je pense que le problème vien du fait que les sauvegard dans la bdd de serv_id on commencé a se numeroter a 2, et donc quand on lance la requète avec services_serv.id=1, elle ne renvoi rien.

    Une idée?

  11. #11
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    oui faire une requete correcte en fonction de tes tables ... mais encore une fois ici c'est le forum javascript ...

    si tu veux que je déplace ton post, indique moi le forum de destination ...

  12. #12
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 51
    Points : 21
    Points
    21
    Par défaut
    Bon, mon problème persiste malgré que toutes les requètes fonctionne et que la bdd ai été refaite , le tuto ne fonctionne tjr pas, peut ètre a cause d'une adaptation en postgres mal faite

    Peut tu déplacé mon thread spacefrog stp, dans la section que tu jugera approprié?

    Voici le code à problème:

    test1.php

    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
    <html>
    	<head>
    		<title>test</title>
    		<script type='text/javascript'>
    	 var xhr = null;
     
    			function getXhr(){
     
    				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(){
    				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;
    						// On se sert de innerHTML pour rajouter les options a la liste
    						document.getElementById('uti_id').innerHTML = leselect;
    					}	
    				}
    				// Ici on va voir comment faire du post
    				xhr.open("POST","ajax.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
    				sel = document.getElementById('services');
    				// ici, l'id de l'auteur
    				serv_id = document.getElementById('services').options[document.getElementById('services').selectedIndex].value;
    				//alert(idauteur);
    				xhr.send("serv_id="+serv_id);
     
    		</script>
    	</head>
    	<body>
    		<form>			
    			<fieldset>
    				<legend>services:</legend>
    				<label>services</label>
    				<select name='service' id='services' onchange='go()'>
    					<option value='-1'>Tous les utilisateurs</option>
    				<?php
                                                    $dbconn = pg_connect("host=localhost dbname=courrier_reserve user=**** password=*****")  
                                                    or die('Connexion impossible : ' . pg_last_error());   
                                                    $query = 'SELECT libelle FROM services';   
                                                    $result = pg_query($query) or die('Échec requête : ' . pg_last_error());   
                                                    while($line = pg_fetch_array($result)){
                                                    echo"<option value='".$row["serv_id"]."'>".$row["services"]."<*;/option>";
     
                            }
                                    ?>
    				<label>utilisateurs</label>
    				<div id='utilisateurs' style='display:inline'>
    				<select name='utilisateurs'>
    					<option value='-1'>testXD</option>
    				</select>
    				</div>
    			</fieldset>
    		</form>
    	</body>

    ajax.php

    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='uti_nom'>";
            if(isset($_REQUEST["serv_id"])){
                                                    // Connexion, sélection de la base de données 
                                                    $dbconn = pg_connect("host=localhost dbname=courrier_reserve user=***** password=*****")  
                                                    or die('Connexion impossible : ' . pg_last_error());   
      
                                                    // Exécution de la requête SQL 
                                                    $query = "SELECT uti_nom FROM services, serv_util,utilisateurs WHERE services.serv_id=serv_util.jsu_serv_id and serv_util.jsu_uti_id=utilisateurs.uti_id and services.serv_id<>1 and services.serv_id=".$_REQUEST["serv_id"]."ORDER BY uti_nom";   
                                                    $result = pg_query($query) or die('Échec requête : ' . pg_last_error());   
                                                    while($line = pg_fetch_array($result)){
                                                    echo"<option value='".$row["uti_id"]."'>".$row["utilisateurs"]."<*;/option>";
     
                    }
            }
            echo "</select>";
    ?>

Discussions similaires

  1. alimenter liste deroulante avec champs texte
    Par logone dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 26/05/2006, 11h53
  2. Réponses: 3
    Dernier message: 05/05/2006, 03h05
  3. Zone de liste deroulante avec preselection précise
    Par dynexd dans le forum Access
    Réponses: 7
    Dernier message: 20/02/2006, 17h25
  4. Liste deroulante avec Zone de texte associée
    Par ahage4x4 dans le forum ASP
    Réponses: 7
    Dernier message: 26/05/2005, 12h19
  5. liste deroulante avec plusieurs champs
    Par JulienT dans le forum Struts 1
    Réponses: 4
    Dernier message: 20/04/2004, 17h17

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