Menus dynamiques sur base de donnee

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Menus dynamiques sur base de donnee

Menus dynamiques sur base de donnee

par TomTom85 » 28 mai 2008, 18:12

Bonjour

J'ai une base de donnée avec les champs [etat,compagnie,prescripteur,commercial]
Je voudrais que les listes se mettent à jours toutes seules en fonction des autres. Par exemple je choisi l'état 2, mais il ny a pas d'état 2 pour toutes les compagnies ! donc n'afficher que les compagnies avec un état 2, et etc...

J'aimerai garder le paramètre choisit d'un menu sur l'autre.

C'est possible?

Voila mes fichiers de tests. les menus se bouffent entre eux
/********************************
* index.php
********************************/
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
	<title>Liste déroulantes dynamiques liées</title>
	<script type="text/javascript" src="xhr.js" charset="iso_8859-1"></script>
</head>
	<?php $listeMenus = "new Array('etat','compagnie','prescripteur','commercial')"; ?>
<body onload="getMenu('',<?php echo $listeMenus; ?>);">
	<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept">
	
				<select name="etat" id="etat" onchange="getMenu('etat',<?php echo $listeMenus; ?>);">
					<option value="">- - - Etat - - -</option>
				</select>
				
				<select name="compagnie" id="compagnie" onchange="getMenu('compagnie',<?php echo $listeMenus; ?>);">
					<option value="">- - - Compagnie - - -</option>
				</select>
				
				<select name="prescripteur" id="prescripteur" onchange="getMenu('prescripteur',<?php echo $listeMenus; ?>);">
					<option value="">- - - Prescripteur - - -</option>
				</select>
				
				<select name="commercial" id="commercial" onchange="getMenu('commercial',<?php echo $listeMenus; ?>);">
					<option value="">- - - Commercial - - -</option>
				</select>
				
				<p id="requete"></p>
				<br>
	<input type="submit" name="ok" id="ok" value="Envoyer" />
	</form>
</body>
</html>
/********************************
* xhr.js
********************************/
/**
 * Lister les départements d'une région avec un objet
 * XMLHTTPRequest.
 */
/* Création de la variable globale qui contiendra l'objet XHR */
var requete = null;
/**
 * Fonction privée qui va créer un objet XHR.
 * Cette fonction initialisera la valeur dans la variable globale définie
 * ci-dessus.
 */
function creerRequete()
{
    try
    {
        /* On tente de créer un objet XmlHTTPRequest */
        requete = new XMLHttpRequest();
    }
    catch (microsoft)
    {
        /* Microsoft utilisant une autre technique, on essays de créer un objet ActiveX */
        try
        {
            requete = new ActiveXObject('Msxml2.XMLHTTP');
        }
        catch(autremicrosoft)
        {
            /* La première méthode a échoué, on en teste une seconde */
            try
            {
                requete = new ActiveXObject('Microsoft.XMLHTTP');
            }
            catch(echec)
            {
                /* À ce stade, aucune méthode ne fonctionne... mettez donc votre navigateur à jour ;) */
                requete = null;
            }
        }
    }
    if(requete == null)
    {
        alert('Impossible de créer l\'objet requête,\nVotre navigateur ne semble pas supporter les object XMLHttpRequest.');
    }
}
/**
 * Fonction privée qui va mettre à jour le menu déroulant "id" avec la réponse .
 */
function actualiserMenu(id)
{
    document.getElementById(id).innerHTML = requete.responseText;
}

/**
 * Fonction publique appelée par la page affichée.
 * Cette fonction va initialiser la création de l'objet XHR puis appeler
 * le code serveur afin de récupérer les données à modifier dans la page.
 */
function getMenu(id, tab)
{
	/* Déclaration de variables */
	var i;
	var where = "";
	
	/* Création du WHERE de la requète */
	for(i=0 ; i<tab.length ; i++)
	{
		where = where + " AND REP."+ tab[i] +" LIKE '%"+ document.getElementById(tab[i]).value +"%' ";
	}
	
	/* Balayage de tous les menus à mettre à jour */
	for(i=0 ; i<tab.length ; i++)
	{
		if(tab[i] == id);
		else
		{
			document.getElementById("requete").innerHTML = where +" "+ id;
			/* À cet endroit précis, on peut faire apparaître un message d'attente */
			document.getElementById(tab[i]).innerHTML = "Mise à jour...";
			/* On crée l'objet XHR */
			creerRequete();
			/* Définition du fichier de traitement */
			var tabtemp = tab[i];
			var url = 'Gestion Menu.php?where='+ where +'&id='+ tabtemp;
			/* Envoi de la requête à la page de traitement */
			requete.open('GET', url, true);
			/* On surveille le changement d'état de la requête qui va passer successivement de 1 à 4 */
			requete.onreadystatechange = function()
			{
			/* Lorsque l'état est à 4 */
				if(requete.readyState == 4)
			    {
					/* Si on a un statut à 200 */
			        if(requete.status == 200)
			        {
						/* Mise à jour de l'affichage, on appelle la fonction apropriée */
			            actualiserMenu(tabtemp);
			        }
			    }
			};
			requete.send(null);
		}
	}
} 
/********************************
* Gestion Menu.php
********************************/
<?php
/**
 * Code qui sera apelé par un objet XHR et qui
 * retournera la liste déroulante des départements
 * correspondant à la région sélectionnée.
 */

/* On récupère l'identifiant de la région choisie. */
$where = isset($_GET['where']) ? $_GET['where'] : false;
$id = isset($_GET['id']) ? $_GET['id'] : false;
/* Si on a une région, on procède à la requête */


if(false !== $where)
{
    /* Création de la requête pour avoir les départements de cette région */
	$sql = "SELECT DISTINCT REP.".$id." FROM reporting_projets REP WHERE REP.type_contrat LIKE '%%' ".$where." ORDER BY ".$id." ASC";
	//$sql = "SELECT DISTINCT REP.etat FROM reporting_projets REP WHERE type_contrat LIKE '%financement%' AND etat LIKE '%%' AND compagnie LIKE '%%' AND prescripteur LIKE '%%' AND commercial LIKE '%%' ORDER BY etat ASC";
	$connexion = mysql_connect("localhost", "TomTom", "");
	$choixbase = mysql_select_db("db_tom", $connexion);
	$recherche = mysql_query($sql, $connexion);
    /* Un petit compteur pour les départements */
	$cmp = 0;
    /* On crée deux tableaux pour les numéros et les noms des départements */
	$listeMenu = array();
    /* On va mettre les numéros et noms des départements dans les deux tableaux */
    while($ligne = mysql_fetch_assoc($recherche))
    {
        $listeMenu[$cmp++]  = $ligne[$id];
    }
    /* Maintenant on peut construire la liste déroulante */
    $liste = '	<option value="">- - -'. $id .'- - -</option>'."\n";
    for($cmp = 0; $cmp < sizeof($listeMenu) ; $cmp++)
    {
        $liste .= '  <option value="'. $listeMenu[$cmp] .'">'. htmlentities($listeMenu[$cmp]) .'</option>'."\n";
    }
    /* Un petit coup de balai */
    mysql_free_result($recherche);
    /* Affichage de la liste déroulante */
    echo($liste);
}
/* Sinon on retourne un message d'erreur */
else
{
    echo("<p>Une erreur s'est produite.</p>\n");
}
?> 
Merci d'avance