Rechercher : dans
Par :

[javascript]listes déroulantes liées par BDD

Dernière réponse le 10 mai 2007 à 15:44:55 konteriano, le 10 mai 2007 à 12:19:25 
 Signaler ce message aux modérateurs

Bonjour tous le monde.

Voila je suis en train de développer une application en php permettant une gestion de stock. J'utilise access 2000 comme base de données.

Mon problème, c'est que je souhaite créer des listes déroulantes liées entre elles. Ces listes doivent etre construite dynamiquement les unes en fonctions des autres. j'ai déjà trouvé des exemples sur le net mais avec des listes static.

Ma question est donc est ce que je peux avoir accés à ma base de données à partir du javascript? si oui, comment faut-il faire? sinon y a t'il un autre moyen?

Merci d'avance.

Configuration: Windows 2000
Firefox 2.0.0.3

1

ixtobilly, le 10 mai 2007 à 15:11:33
  • +1

<script language="javascript">
// Sert a interroger une base de donne mysql sans envoi direct de donnees vers le serveur
// ceci est utile pour les controle "listbox" dynamique
// Auteur : AMOIKON Georges Wilfrid alias Willy alias ixtobilly( inspiré dun code pris sur le net www.toutjavascript.com)

function request05(f, fichier, elem1, elem2)
{

var l1  = f.elements[elem1];
var l2  = f.elements[elem2];

var index = l1.selectedIndex;
if(index < 1)
   l2.options.length = 0;
else {
   var xhr_object = null;
	
   if(window.XMLHttpRequest) // Firefox
      xhr_object = new XMLHttpRequest();
   else if(window.ActiveXObject) // Internet Explorer
      xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
   else { // XMLHttpRequest non supporté par le navigateur
      alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
      return;
   }

   xhr_object.open("POST", fichier, true);
	
   xhr_object.onreadystatechange = function() {
      if(xhr_object.readyState == 4)
         eval(xhr_object.responseText);
		// alert(xhr_object.responseText);
   }

   xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
   var data = elem1+"="+escape(l1.options[index].value)+"&form="+f.name+"&select="+elem2;
   xhr_object.send(data);
   // alert(data);
}

}	// fin de la fonction


</script>

 // Dans ta feuille principale :

<form name=form1 action='post'>
<? 

 
  
// initialisation de la requete
$sql = "select CODEDIRECTION, LIBELLEDIRECTION from direction order by  LIBELLEDIRECTION desc"; // permet d'extraire les codes des Direction de ma BD (Mysql)
// mise en ex&eacutecution
// Ne pas oublier les instructions (Toi tu utilises ACCESS dc peut être un peut différent)
 // $liste = $resultat_sql;
 
// exploitation des resultats   
?>
  <select name="direction" id="direction" onChange="request05(this.form,'departement.php','direction','departement');" >
   <option value="" selected="selected"></option>
 <?    if (is_array($liste)) 
	  foreach ($liste as $c => $record)
		echo "<option value=$record[0] selected>$record[1]</option>";
  ?>
 </select> 

<select name="departement" id="departement" >

	</select>

 </form>
 // Fin de ta feuille principale
 
 
 
 
?>


<?php 

// Debut de departement.php
 
// Tu insères dans cette variable ta requête - Elle est à adapter bien sure - 

$query  = "select `CODEPARTEMENT`,`LIBELLEDEPARTEMENT` from `departement` where `CODEDIRECTION` ='".$_POST["direction"]."' order by `LIBELLEDEPARTEMENT` desc"; 

// exploitation des resultats   
echo 'var o = null;';
echo 'var s = document.forms["'.$_POST["form"].'"].elements["'.$_POST["select"].'"];';
echo 's.options.length = 1;';

// mise en ex&eacutecution
$liste = $ObjVehicule->selectRecords($query); (selectRecords retourne un fectch array -> le tableau de reponse ki contient les resultats de ta requete - donc a adapter -)

if (is_array($liste)) 
  foreach ($liste as $c => $r)
	echo 's.options[s.options.length] = new Option("'.$r["LIBELLEDEPARTEMENT"].'","'.$r["CODEPARTEMENT"].'");';
	
 $ObjVehicule->closeConnection(); 

 // Fin de departement.php
?> 



Notes : Sql des tables



--
-- Structure de la table `departement`
--

CREATE TABLE departement (
  CODEPARTEMENT int(11) NOT NULL default '0',
  CODEDIRECTION int(11) NOT NULL default '0',
  LIBELLEDEPARTEMENT varchar(50) default NULL,
  PRIMARY KEY  (CODEPARTEMENT)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- 
-- Contenu de la table `departement`
-- 

INSERT INTO departement VALUES (6, 3, 'DRH');
INSERT INTO departement VALUES (5, 3, 'DAP');
INSERT INTO departement VALUES (4, 2, 'CCI');
INSERT INTO departement VALUES (3, 2, 'DE');
INSERT INTO departement VALUES (2, 2, 'DST');
INSERT INTO departement VALUES (1, 2, 'DED');
INSERT INTO departement VALUES (7, 3, 'DCB');
INSERT INTO departement VALUES (8, 1, 'DM');
INSERT INTO departement VALUES (9, 1, 'DECP');
INSERT INTO departement VALUES (10, 1, 'DT');
INSERT INTO departement VALUES (11, 1, 'DEMSP');

-- --------------------------------------------------------

-- 
-- Structure de la table `direction`
-- 

CREATE TABLE direction (
  CODEDIRECTION int(11) NOT NULL default '0',
  LIBELLEDIRECTION varchar(50) default NULL,
  PRIMARY KEY  (CODEDIRECTION)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- 
-- Contenu de la table `direction`
-- 

INSERT INTO direction VALUES (6, 'DR ABENGOUROU');
INSERT INTO direction VALUES (5, 'DR BOUAKE');
INSERT INTO direction VALUES (4, 'DR ABIDJAN');
INSERT INTO direction VALUES (3, 'DAC');
INSERT INTO direction VALUES (2, 'DSI');
INSERT INTO direction VALUES (1, 'DO');
INSERT INTO direction VALUES (7, 'DR KORHOGO');
INSERT INTO direction VALUES (8, 'SJFisc');
INSERT INTO direction VALUES (9, 'SGene');
INSERT INTO direction VALUES (10, 'Conseil');
INSERT INTO direction VALUES (0, 'CtrGen');



Bonne chance

Répondre à ixtobilly

2

konteriano, le 10 mai 2007 à 15:20:46

Merci beaucoup pour ta réponse, je vais regarder ça et voir si jarrive à le faire avec ma base de données access

Répondre à konteriano

3

 ixtobilly, le 10 mai 2007 à 15:44:55

Tiens j'ai retoruvé la page en question ( http://www.toutjavascript.com/savoir/xmlhttprequest.php3 ) , tu y as aussi toutes les explications.

Ps: Fais attention aux guillemets et autres symboles ( ` ) ils peuvent te donner la migraine

Répondre à ixtobilly