Recherche incrémentale sur une liste déroulante

Signaler
Messages postés
19
Date d'inscription
jeudi 3 mars 2005
Statut
Membre
Dernière intervention
19 mars 2010
-
Messages postés
19
Date d'inscription
jeudi 3 mars 2005
Statut
Membre
Dernière intervention
19 mars 2010
-
Bonjour,

Voici mon soucis, et je ne sais pas comment faire . J'ai une liste déroulante dans laquelle j'ai des données émanant d'une base SQL. Je voudrais lorsque l'utilisateur tape les premières lettres dans cette liste quelle recherche automatiquement l'enregistrement. Actuellement, seul la première lettre est prise en compte. Est-il possible de faire cela ?

Par avance merci

13 réponses

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
Bonjour,

http://www.javascriptfr.com/code.aspx?id=27983

quelques explications sur certains
traitements possibles sur les select.
[ recherche sur les "n" 1ers caractères entr'autres ]

Cordialement. Bul. ~Site~~[mailto:marcelBultez@tiscali.fr Mail]~
Messages postés
19
Date d'inscription
jeudi 3 mars 2005
Statut
Membre
Dernière intervention
19 mars 2010

Tout d'abord merci pour ton info, ca m'a permis d'avancer.. Par contre je ne vois pas le pb, voici le code de ma page et lorsque je l'exécute j'ai une erreur sur le name "Utilisateur", l'explorateur me signale qu'il ne connait pas cette valeur ? Pouvez-vous m'aider, par avance merci





<?
session_start();
session_destroy();
session_start();
?>
<HTML>
<head>
<script type= "text/javascript">
function position()
{
window.print(utilisateur[n].text);
for (var n=0;n=rech.value)
{
utilisateur.selectedIndex=n;
n=utilisateur.length;


}
}
}
</script>


</head>

</HTML>


<?
$Valider=$_POST['Valider'];
$db = mysql_connect('localhost', 'root', '');
mysql_select_db('Annuaire',$db);


echo " CONNEXION A LA GESTION DES DEMANDES DE PRESTATIONS

\n";
echo "<form action ='login.php4' method= 'POST' >\n";
echo " <Center><colspan='2'> UTILISATEUR :
<SELECT NAME ='utilisateur' onkeyup= 'position()'>\n";
$sql = 'SELECT * FROM personne WHERE pers="OUI" ORDER BY Nom;';
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
echo "<OPTION></OPTION>";
while($data = mysql_fetch_array($req))
{
$utilisateuraffichenom=$data['Nom'];
$utilisateurafficheprenom=$data['Prenom'];
echo "<OPTION>$utilisateuraffichenom $utilisateurafficheprenom</OPTION>\n";
}


echo "</SELECT></Center>
\n";

echo "<Center> Mot de passe : </Center>
\n";
echo "<center></center>
\n";
echo "";
echo "</form>\n";



if ($Valider =='Valider')
{





// recherche si mot de passe
// Séparation nom et prenom
if (empty($motpasse))
{
echo '<script>alert("Erreur aucun mot de passe de saisie")</script>';
}


else
// CONTROLE LE MOT DE PASSE ET L UTILISATEUR
/// test de l utilisateur
{
$position=strrpos($utilisateur," ");
$nomutilisateur=substr($utilisateur,0,$position);
$prenomutilisateur=substr($utilisateur,$position+1);
$db = mysql_connect('localhost', 'root', '');
mysql_select_db('Annuaire',$db);
$sql = "SELECT * FROM personne WHERE Nom='$nomutilisateur' and Prenom='$prenomutilisateur' ORDER BY Nom;";
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
while($data = mysql_fetch_array($req))
{
if (($nomutilisateur=$data['Nom'])and ($prenomutilisateur=$data['Prenom'])and ($motpasse==$data['MDP']))
{
//Ok pour le mot de passe
$utilisateursit=$data['AGENT_SIT'];
$utilisateurgr=$data['CHEF_GR'];
$grutilisateur=$data['GR_PERS'];
$motdepasse=$data['MDP'];
$codeutilisateur=$data['Code_personne'];
session_register("nomutilisateur");
session_register("prenomutilisateur");
session_register("utilisateursit");
session_register("utilisateurgr");
session_register("grutilisateur");
session_register("motdepasse");
session_register("codeutilisateur");
session_register("selection");

echo "
<Center>Menu principal</center>

";
echo "<center></Center>";
}
else
{
echo '<script>alert("Mot de passe erroné")</script>';
}
}
}





}
?>
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
bien,
déjà c'est plus simple si on poste la page générée
et pas la page php, sinon il nous faut les fichiers,
la base de données, charger php en local ...
et je vois dans la fonction position() :
window.print...
cet ordre, quand la page a été totalement
affichée ( ce qui est le cas ici car fonction
appelée sur le onkeyup d'un select )
efface tout la page, y compris les javascript.
[ pour controler : affciher la source après
cette action ], il faut donc voir la chose
autrement.
Cordialement. Bul. ~Site~~[mailto:marcelBultez@tiscali.fr Mail]~
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
bien,
déjà c'est plus simple si on poste la page générée
et pas la page php, sinon il nous faut les fichiers,
la base de données, charger php en local ...
et je vois dans la fonction position() :
window.print...
cet ordre, quand la page a été totalement
affichée ( ce qui est le cas ici car fonction
appelée sur le onkeyup d'un select )
efface tout la page, y compris les javascript.
[ pour controler : affciher la source après
cette action ], il faut donc voir la chose
autrement.
Cordialement. Bul. ~Site~~[mailto:marcelBultez@tiscali.fr Mail]~
Messages postés
19
Date d'inscription
jeudi 3 mars 2005
Statut
Membre
Dernière intervention
19 mars 2010

Salut Bultez,

Merci pour tes infos, je commence à comprendre le pb, par contre j'ai du mal à voir comment je peut faire pour corriger ce pb. Peux tu me donner un exemple plus précis. ?

Par avance merci
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
à quoi sert window.print(utilisateur[n].text); ?
ça met le nom de l'utilisateur sur la page
[ en l'effaçant au préalable ], c'est tout
donc, inexploitable.
que faut-il faire dans position() ?
mais donne nous la page html générée, pas
la page php.
Cordialement. Bul. ~Site~~[mailto:marcelBultez@tiscali.fr Mail]~
Messages postés
19
Date d'inscription
jeudi 3 mars 2005
Statut
Membre
Dernière intervention
19 mars 2010

Salut,

Voilà la page générée :
<HTML>
<head>
<title></title>
</head>

</HTML>


CONNEXION A LA GESTION DES DEMANDES DE PRESTATIONS

<form name= 'login' action='login.php4' method='POST' >
<Center><colspan='2'> UTILISATEUR :
<SELECT NAME ='utilisateur' onkeyup= 'position(this.name)'><OPTION></OPTION><OPTION>ALAIN Olivier</OPTION>
<OPTION>ALOUX Guillot</OPTION>
</SELECT></Center>

<Center> Mot de passe : </Center>

<center></center>

</form>
<script type ="text/javascript">
function position()
{
for (var n=0;n=rech.value)
{
utilisateur.selectedIndex=n;
n=utilisateur.length;
}
}
}
</script>


Pour le window.print c'était pour faire un essai. Mais le problème que j'ai c'est que j'ai une erreur sur la ge où il m'indique que utilisateur est indéfinit ????

Merci
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
pas compris ce qu'il faut faire dans position()
j'y ai donc mis un message de la ligne sélectionnée

<HTML>
<head>
<title></title>
<script type= "text/javascript">
function position(zone)
{
alert ( zone ) ;
}
</script>
</head>

CONNEXION A LA GESTION DES DEMANDES DE PRESTATIONS


<form name ='login' action= 'login.php4' method='POST' >
<Center><colspan='2'> UTILISATEUR :
<SELECT NAME ='utilisateur'
onchange='position(this[this.selectedIndex].text)'>
<OPTION></OPTION>
<OPTION>ALAIN Olivier</OPTION>
<OPTION>ALOUX Guillot</OPTION>
</SELECT></Center>

<Center> Mot de passe :

</center>

</form>
</HTML>

name select[name select.selectedIndex].text ou .value
c'est la ligne sélectionnée.
nous dire ce qu'il faut faire dans position().
Cordialement. Bul. ~Site~~[mailto:marcelBultez@tiscali.fr Mail]~
Messages postés
19
Date d'inscription
jeudi 3 mars 2005
Statut
Membre
Dernière intervention
19 mars 2010

Merci pour ton aide. J'ai testé ton code est c'est ok plus de messages d'erreur. Par contre dans position, ce que je voulais faire c'est de pouvoir taper les premières lettres d'une valeure de la boite de liste et que celle-ci se positionne au fur et à mesure sur l'enregistrement voulu ?

Par avance merci
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
sur ce site, j'ai mis une source qui explique ça.
"traitements sur les select" je crois.
Cordialement. Bul. ~Site~~[mailto:marcelBultez@tiscali.fr Mail]~
Messages postés
19
Date d'inscription
jeudi 3 mars 2005
Statut
Membre
Dernière intervention
19 mars 2010

J'ai vu ta source, mais j'ai un autre soucis, comment connaitre quelle touche l'utilisateur à frapper. Je m'explique, dans la liste déroulante, l'utilisateur tape ALA et s'il tape A je rentre dans la fonction position mais comment je sais sur quelle touche il a appuyé ?
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
dans mon exemple, il faut que la saisie se fasse dans
un textbox, et on réagit avec onkeyup par exemple.
si on veux le faire directement dans le select, je ne
sais pas si c'est possible. onkeyup est-ce possible ?
de plus il faut détecter si c'est le 1er caractère, les suivants,
les touches annul, sélection, effacement, le copier/coller ....
pas si simple, si c'est possible.
Cordialement. Bul. ~Site~~[mailto:marcelBultez@tiscali.fr Mail]~
Messages postés
19
Date d'inscription
jeudi 3 mars 2005
Statut
Membre
Dernière intervention
19 mars 2010

C'est vrai je n'avais pas pensé à tout ca...

Encore merci