Recherche incrémentale sur une liste déroulante

KILLGUNBLOOD Messages postés 19 Date d'inscription jeudi 3 mars 2005 Statut Membre Dernière intervention 19 mars 2010 - 3 mars 2005 à 09:11
KILLGUNBLOOD Messages postés 19 Date d'inscription jeudi 3 mars 2005 Statut Membre Dernière intervention 19 mars 2010 - 4 mars 2005 à 15:23
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

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
3 mars 2005 à 09:24
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]~
0
KILLGUNBLOOD Messages postés 19 Date d'inscription jeudi 3 mars 2005 Statut Membre Dernière intervention 19 mars 2010
3 mars 2005 à 13:08
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>';
}
}
}





}
?>
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
3 mars 2005 à 15:05
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]~
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
3 mars 2005 à 15:07
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]~
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
KILLGUNBLOOD Messages postés 19 Date d'inscription jeudi 3 mars 2005 Statut Membre Dernière intervention 19 mars 2010
4 mars 2005 à 10:42
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
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
4 mars 2005 à 11:22
à 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]~
0
KILLGUNBLOOD Messages postés 19 Date d'inscription jeudi 3 mars 2005 Statut Membre Dernière intervention 19 mars 2010
4 mars 2005 à 11:45
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
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
4 mars 2005 à 12:28
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]~
0
KILLGUNBLOOD Messages postés 19 Date d'inscription jeudi 3 mars 2005 Statut Membre Dernière intervention 19 mars 2010
4 mars 2005 à 12:39
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
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
4 mars 2005 à 12:48
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]~
0
KILLGUNBLOOD Messages postés 19 Date d'inscription jeudi 3 mars 2005 Statut Membre Dernière intervention 19 mars 2010
4 mars 2005 à 13:09
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é ?
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
4 mars 2005 à 15:15
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]~
0
KILLGUNBLOOD Messages postés 19 Date d'inscription jeudi 3 mars 2005 Statut Membre Dernière intervention 19 mars 2010
4 mars 2005 à 15:23
C'est vrai je n'avais pas pensé à tout ca...

Encore merci
0
Rejoignez-nous