Salut La comm et bonne fetes.
je suis en train de rediger un formulaire php et voila. j'aimerais que le contenus d'une zone de liste soit dependant de celui de la liste qui la precède. Le tout doit etre fait en auto completion c'est à dire que l'utilisateur doit avoir la liste des enregistrement de la base de données au fur et à mesure qu'il saisit la texte.
Seulement voila. j'arrive à faire la pemiere liste. okay parfait ya pas de probleme. Mais au niveau de la deuxieme liste je n'arrive pas à avoir la liste au fur et à mesure du texte saisi.
Voici le code de mon formulaire.php
<?php
// on inclut la connexion
mysql_connect('localhost', 'root', '');
mysql_select_db('soa');
if(isset($_POST['faculte'])){
header('Content-type: text/html; charset=iso-8859-1');
// on fait la requête
$sql = "SELECT `code_faculte`, `libelle_faculte`
FROM `faculte`
WHERE `libelle_faculte` LIKE '".$_POST['faculte']."%'";
$req = mysql_query($sql);
$i = 0;
echo '<ul class="payss">';
// on boucle sur tous les éléments
while($autoCompletion = mysql_fetch_assoc($req)){
echo '
<li class="pays"><span class="informal" style="display: none;">'.$autoCompletion['code_faculte'].'-idcache</span><div class="nom">'.$autoCompletion['libelle_faculte'].'</div></li>';
// on s'arrête s'il y en a trop
if (++$i >= 10)
die('<li>...</li></ul>');
}
echo '</ul>';
die();
}
elseif(isset($_POST['code_faculte'])){ // renvoyé par le deuxième Autocompleter
header('Content-type: text/html; charset=iso-8859-1');
// on fait la requête
$sql = "SELECT `code_filiere`, `libelle_filiere`
FROM `filiere`
WHERE `libelle_filiere` LIKE '".$_POST['filiere']."%'
AND `code_faculte`='".$_POST['code_faculte']."'";
$req = mysql_query($sql);
$i = 0;
echo '<ul class="villes">';
// on boucle sur tous les éléments
while($autoCompletion = mysql_fetch_assoc($req)){
echo '
<li class="ville"><span class="informal" style="display: none;">'.$autoCompletion['code_filiere'].'-idcache</span><div class="nom">'.$autoCompletion['libelle_filiere'].'</div></li>';
// on s'arrête s'il y en a trop
if (++$i >= 10)
die('<li>...</li></ul>');
}
echo '</ul>';
die();
}
?>
<!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">
<head>
<title>Lier deux champs en autocompletion</title>
<script type="text/javascript" src="lib/prototype.js"></script>
<script type="text/javascript" src="lib/scriptaculous.js"></script>
<script type="text/javascript" src="lib/autocompletion2.js"></script>
<style type="text/css">
body{
font-family: Verdana, Arial, Helvetica, sans-serif;
text-align: justify;
font-size: 12px;
color: #565656;
}
img {
border: none;
}
ul {
list-style: none;
margin: 0;
padding: 0;
}
/* Autocompletion */
.update{
position:absolute;
width:250px;
background-color:white;
border:1px solid #888;
margin:0px;
padding:0px;
}
ul.villes, ul.payss {
list-style-type: none;
margin:0px;
padding:0px;
text-align: left;
}
ul.villes li.selected, ul.payss li.selected { background-color: #ffb; cursor: pointer; }
li.ville, li.pays {
list-style-type: none;
display:block;
margin:0;
padding:2px;
height:15px;
}
li.ville div.nom, li.pays div.nom {
font-weight:bold;
font-size:12px;
line-height:1.2em;
}
</style>
</head>
<body>
Liste des pays avec leur villes présents dans la base :<br/>
<?php
// on fait la requête
$sql1 = "SELECT `libelle_faculte`, `code_faculte`
FROM `faculte`";
$req1 = mysql_query($sql1);
while($allfaculte = mysql_fetch_assoc($req1)){
echo '<u>'.$allfaculte['code_faculte'].'.</u> '.$allfaculte['libelle_faculte'].'<br/>';
$sql2 = "SELECT `libelle_filiere`, `code_filiere`
FROM `filiere`
WHERE `code_faculte` = \"".$allfaculte['code_faculte']."\"";
$req2 = mysql_query($sql2);
while($somefiliere = mysql_fetch_assoc($req2)){
echo ' <u>'.$somefiliere['code_filiere'].'.</u> '.$somefiliere['libelle_filiere'].'<br/>';
}
}
?>
<br/>
<form action="?" method="post">
<div style="float: left">
<label for="faculte">faculte : </label>
<!-- Le champ "pays" 1ère autocomplétion -->
<input type="input" name="faculte" id="faculte" value="" />
<div class="update" id="faculte_update"></div>
</div>
<div style="float: left; margin-left: 20px">
<label for="filiere">filiere : </label>
<!-- Le champ "filiere" 2ème autocomplétion, liée à "faculte" -->
<input type="input" name="filiere" id="filiere" value="" />
<div class="update" id="filiere_update"></div>
</div>
<div>
<!-- Le champ caché "id_faculte" pour faculte -->
<input type="hidden" name="faculte_id" id="faculte_id" value="" />
<!-- Le champ caché "id_filiere" pour filiere (si, si, sans déconner !) -->
<input type="hidden" name="filiere_id" id="filiere_id" value="" />
</div>
</form>
<script type="text/javascript">
new Ajax.Autocompleter (
'faculte',
'faculte_update',
'autocompletion2.php',
{
method: 'post',
paramName: 'faculte',
afterUpdateElement: ac_return
}
);
filiere_completer = new Ajax.Autocompleter (
'filiere',
'filiere_update',
'autocompletion2.php',
{
method: 'post',
paramName: 'filiere',
parameters: 'code_faculte='+$F('faculte_id'),
afterUpdateElement: ac_return
}
);
Event.observe(
'faculte',
'blur',
function(){
filiere_completer.options.defaultParams='code_faculte='+$F('faculte_id')
}
);
</script>
</body>
</html>
Quelqu'un l'a deja fait ? ou alors quelqu'un pour m'aider ?
Merci à tous
__________________________
A partir du 14 Mars à 08h43, je passe en mode Flex ....
Le code..............
Ya rien de mieux Ke le kod............
Ouaip. mais on peut dire que c'est le but de l'ajax : quoiqu'il arrive on fait appel au serveur. Ceci dit avec un accès persistant au serveur c'est pas gagné d'avance et bientot venu les degats comme tu dis. Mais en mode déconnecté (style ASP), bah les problemes d'accès au serveur ne sont plus un frein.
Mais bon. Hormis cela. ton script est similaire à un script que j'ai eu à tester du moins une methode. mais j'y rejette un oeil. si tu dis que ca marche alors ca marche.
Merci encore.
__________________________
A partir du 14 Mars à 08h43, je passe en mode Flex ....
Le code..............
Ya rien de mieux Ke le kod............