|
|
|
|
Bonjour,
Je débute en php et j'essaye de faire une petite page Web pour un service de mon entreprise.
Je dois faire 4 listes déroulantes dynamiques imbriquées avec possibilité d'ajouter un nouvel élément sans passer par une autre page.
J'y vais pas par pas, et pour l'instant j'en suis juste à faire 2 listes imbriquées. Cela fonctionne mais seulement si le champs qui filtre la seconde liste est en format numérique. Mon problème est que des codifications internes existent déjà (numérique + caractère) et je voudrais les récupérer. Si je ne peux pas les utiliser, je vais devoir créer 4 tables de correspondance, alors que sans ce pb, cela ne serait pas nécessaire.
Si quelqu'un a déjà eu ce pb?
Merci
Configuration: Windows XP Internet Explorer 7.0
Salut,
|
Tout d'abord, merci beaucoup pour ta réponse.
|
Une gentille personne m'a trouvé la solution sur un autre site.
|
Haaa ouai ... juste ça ok moi j'essayé de comprendre le principe en fait ! lol
$sql2 = "SELECT distinct `localisation`". " FROM `analyses`". " WHERE `affaire` = ". $idr ."". " ORDER BY `localisation`;"; PAR SA : $sql2 = "SELECT distinct `localisation` FROM `analyses` WHERE `affaire` = '".$idr."' ORDER BY `localisation`"; A+ Gaerebut Il y a 2 règles d'or pour réussir dans la vie : -Règle 1: ne jamais dire tout ce que l'on sait... -Règle 2: ... |
Ok no problème!
|
Je précise que quand je dis que je te répondrai dans la minute, c'est si tu m'envoie ça entre 9h du matin et 17h ! Puis de 20h à 00h00 je fais quelque pause entre 2 oui oui je suis un humain malgrès tout ;)
|
Ok !
|
Bonjour messieurs!
|
Bonsoir Papymucho.
|
Ajax n'est pas un langage, en fait c'est du javascript... Disons que c'est juste une méthode, qui permet d'actualiser certains éléments de ta page, sans avoir à recharger entièrement ta page... Pratique donc pour des listes déroulantes dynamique qui se remplissent en fonction du choix fait dans une autre liste.
|
Salut,
<html>
<head>
<script type="text/javascript" src="ajax.js"></script>
</head>
<body onload="Ajax(0, 'ajax', 'affaires', 0)">
<select id="affaires" onchange="Ajax(this.value, 'ajax', 'localisations', 0)"></select>
<select id="localisations" onchange="Ajax(this.value, 'ajax', 'info3', document.getElementById('affaires').value)"></select>
<select id="info3"></select>
</body>
</html>
Contenu de la page ajax.js : function Ajax(str, page, result, champ)//str est la chaine envoyé, page est la page php appellé (sans l'extension), result est l'id de l'élément ou sera afficher le résultat renvoyé par le serveur et str2 est une deuxième chaine d'envoyé
{
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert ("Votre navigateur ne supporte pas le HTTP Request")
return
}
var url="./inc/"+page+".php"
url=url+"?q="+str+"&p="+str2
url=url+"&sid="+Math.random()
xmlHttp.onreadystatechange=getStateChanged(result);
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}
function getStateChanged(result)
{
if (typeof(result) === 'string')
{
result = document.getElementById(result);
}
return function()
{
if (xmlHttp.readyState==4)
{
result.innerHTML = xmlHttp.responseText;
}
}
}
function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
//Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
Contenu de la page ajax.php :
//Bon ben ici c'est ta page php, j'ai pas grand chose à mettre puisque c'est en quelque sorte ton code a quelques modifications près !
mysql_connect("localhost", "root" , "");
mysql_select_db("BASE");
$q = $_GET["q"];//Premiere chaine reçu
$p = $_GET["p"];//Deuxième chaine reçu (=0 si il y a qu'une chaine, dans le cas on est juste sur la première liste déroulante !)
if(!$q && !$p)// Si $p ET $q valent 0, c'est qu'on initialise la première select box
{
//CODE PHP MYSQL A INSERER
//ALLER DANS LA BASE DE DONNEES POUR VOIR TOUTES LES AFFAIRES ET LES AFFICHER VIA UNE BOUCLE while($tableau = mysql_fetch_array($requete)){}
//A CHAQUE TOUR DE BOUCLE ON DOIT CREER UNE ENTREE DANS LE SELECT DONC ONT METTRE UN TRUC DE CE GENRE :
// while($tableau = mysql_fetch_array($requete)){?><option><?php echo $tableau['affaire']; ?></option><?php}
//ICI, $tableau['affaire'] CONTIENT L'AFFAIRE ET AFFICHERA TOUTES LES AFFAIRES DE TA BASES GRACE A TA REQUETE
}
else if($q && !isset($p))//SI ON RECOIT QU'UNE SEUL VARIABLE, C'EST QUE L'ON A CHOISIS UNE AFFAIRE
{
//COMME POUR LA CONDITION PRECEDENTE, ON CONSTRUIT LE SELECT DE LA MEME MANIERE SAUF QUE LA REQUETE AURA UNE CONDITION, IL FAUDRA DIRE UN TRUC DU GENRE, AFFICHER TOUTES LES LOCALISATIONS QUI APPARTIENNENT A L'AFFAIRE $q
}
else if($q && $p)
{
//DERNIER SOLUTION, ON RECOIT $p ET $q DONC ONT VIENT DE CHOISIR LA LOCALISATION ET ON VEUT AFFICHER LES INFO3 EN FONCTION DE $p ET DE $q.
//TOUJOURS LE MEME PRINCIPE MAIS LA REQUETE DEVRA ICI COMPORTER 2 CONDITIONS $q = CONDITION CHOISIE ET $p = AFFAIRE CHOISIE
}
else
{
echo "ERREUR !";
}
mysql_close();
?>
Bon voila comme promis ce fameux code, j'espère que ça sera clair ! ^^ J'ai essayé de commenter au max ce que tu aura besoin de comprendre ! SI tu veux des explications sur le fichier JS ou HTML, demande moi ! :) En espérant t'avoir aidé :) A+ Gaerebut Il y a 2 règles d'or pour réussir dans la vie : -Règle 1: ne jamais dire tout ce que l'on sait... -Règle 2: ... |
J'attendais de voir la soluce de Gaerebut, mais je vais donc te laisser celle-ci également.
<select id='select_equipment' name='select_equipment' onchange="show_form(this)">
<option value='void'>Choose an equipment</option>
<?php
include("_inc_connexion.php");
$query = "SELECT id_equipment, equipment FROM T_equipment ORDER BY equipment ASC";
$rq = mysql_query($query) or die(mysql_error());
while ($row=mysql_fetch_array($rq, MYSQL_ASSOC))
{
$id_equipment = $row["id_equipment"];
$equipment = $row["equipment"];
echo "<option value='$id_equipment'>$equipment</option>";
}
mysql_close();
?>
</select>
fichier : _inc_select_model.php
<select id='select_model' name='select_model'>
<option value='void'>Choose a model</option>
<?php
include("_inc_connexion.php");
$var=$_POST['var'];
$query = "SELECT id_model, model FROM T_model WHERE id_equipment='$var' ORDER BY model ASC";
$rq = mysql_query($query) or die(mysql_error());
while ($row=mysql_fetch_array($rq, MYSQL_ASSOC))
{
$id_model = $row["id_model"];
$model = $row["model"];
echo "<option value='$id_model'>$model</option>";
}
mysql_close();
?>
</select>
et enfin le fichier javascript:
function show_form(id_form)
{
get_url(id_form.value);
}
function get_url(test)
{
var selected = document.getElementById("select_equipment").options[document.getElementById("select_equipment").selectedIndex].value;
$.ajax
(
{
type: "POST",
url: "_inc_select_model.php",
data: "var="+test,
success:
function(msg)
{
$("#tr_test").append("<td class='title'><b>Model :</b></td><td>"+ msg +"</td>");
if(selected=="void") $("#tr_test").hide();
else $("#tr_test").show();
}
}
);
}
et le formulaire :
<tr>
<td class='title'><b>Equipment :</b></td><td><?php include('_inc_select_equipment.php')?></td>
</tr>
<tr id='tr_test'>
</tr>
Y'a une tite fonction en plus, qui cache le 2ème menu déroulant tant que l'utilisateur n'a pas fait un choix dans le 1er menu déroulant.....
|