Merci pour ta réponse.Salut ,
J'ai peut être une solution ,
Le principe , est d'ajouter en premier , dans la liste des résultats , le contenu du champ text ( les premiéres lettres que l'utilisateur a tapé )
Ainsi , s'il tape directement "entrer" , ce sera le mot qu'il a ecrit , et un mot proposé ...
Sinon , il doit y avoir moyen de retirer "l'autofocus" de la liste ..
Ch.
$TabRes = mysql_fetch_array( ... ) ...
array_unshift($TabRes, $firstletters);
array_unshift ajoute au début de ton tableau , ainsi , ce sera le premier élément affiché dans tes propositions , donc , forcement l'element sélectionné automatiquement.Merci pour ta réponse, je connaissais pas "array_unshift".A l'exécution de ta requête , je suppose que tu récupères dans un tableau ta liste de mots .
le principe est donc d'ajouter les les premiers caractères tapé par l'utilisateur ( que tu as du utiliser dans ta requête ) , en tête de ton tableau.
Pour illustrer :
array_unshift ajoute au début de ton tableau , ainsi , ce sera le premier élément affiché dans tes propositions , donc , forcement l'element sélectionné automatiquement.$TabRes = mysql_fetch_array( ... ) ... array_unshift($TabRes, $firstletters);
Si on arrive pas à retirer "l'autofocus" on l'utilise à notre avantage ..
Ch.
Code : Tout sélectionner
<script type="text/javascript" language="javascript" charset="utf-8" >
new Autocompleter.Local("ac1","ac1update",
new Array($mots), { choices: $nb_mots, tokens: new Array(" ","n"), fullSearch: true, partialSearch: false });
</script>
Ok, voici le code utilisant "array_unshift";montre nous le code que tu utilises pour créer $mots
Je sais ..Parfois les utilisateurs ................ Twisted Evil Evil or Very Mad
Code : Tout sélectionner
<script type="text/javascript" language="javascript">
// <![CDATA[
new Ajax.Autocompleter('rechajax','selupdate','search.php',{});
// ]]>
</script>
Code : Tout sélectionner
require("../config_inc.php");
$selec = $_POST["rechajax"];
$nb = strlen($selec);
if ($nb < 2) {
"";
}
else {
$query_mots = "SELECT * FROM aide_indexation WHERE (espaceid='xx' or espaceid = 'yy') and mots like '$selec%' order by mots";
$result_mots = mysql_query($query_mots);
if (mysql_num_rows($result_mots) > 0) {
print "<ul>";
while ($row_mots = mysql_fetch_array($result_mots)) {
$mots = strtolower($row_mots['mots']);
array_unshift($row_mots,$selec);
print "<li>$mots</li>";
}
print "</ul>";
}
}
require("../config_inc.php");
$selec = $_POST["rechajax"];
$nb = strlen($selec);
if ($nb < 2) {
"";
}else {
$query_mots = "
SELECT
mots
FROM
aide_indexation
WHERE (
espaceid='xx'
OR
espaceid = 'yy'
)
AND
mots like '".mysql_real_escape_string($selec)."%'
ORDER BY
mots";
$result_mots = mysql_query($query_mots)or die(mysql_error());
if (mysql_num_rows($result_mots) > 0) {
//récupére les resultats dans un tableau
$TabRes = array();
$TabRes = mysql_fetch_assoc($result_mots);
}
//ajout des premiers caractéres entrés par l'utilisateur
array_unshift($TabRes,$selec);
//création de la liste pour l'autocomp.
foreach($TabRes AS &$res){
echo '<ul>
<li>'.strtolower($res['mots']).'</li>
</ul>';
}
Je me suis permis de changer quelques petites choses , ton script était sujet aux injections sql ... Yes, merci beaucoup !!Voilà ce que je te propose :
Je me suis permis de changer quelques petites choses , ton script était sujet aux injections sql ...require("../config_inc.php"); $selec = $_POST["rechajax"]; $nb = strlen($selec); if ($nb < 2) { ""; }else { $query_mots = " SELECT mots FROM aide_indexation WHERE ( espaceid='xx' OR espaceid = 'yy' ) AND mots like '".mysql_real_escape_string($selec)."%' ORDER BY mots"; $result_mots = mysql_query($query_mots)or die(mysql_error()); if (mysql_num_rows($result_mots) > 0) { //récupére les resultats dans un tableau $TabRes = array(); $TabRes = mysql_fetch_assoc($result_mots); } //ajout des premiers caractéres entrés par l'utilisateur array_unshift($TabRes,$selec); //création de la liste pour l'autocomp. foreach($TabRes AS &$res){ echo '<ul> <li>'.strtolower($res['mots']).'</li> </ul>'; }
Pense à toujours au moins mettre : mysql_real_escape_string() sur les variables introduites dans tes requetes ..
Voilà .. dis moi si celà fonctionne ..
Ch.
<?php
//caractéres entrés par l'utilisateur
$car = "ad";
$Tabres[] = "mot1";
$Tabres[] = "mot2";
$Tabres[] = "mot3";
$Tabres[] = "mot4";
//insertion des premiers caractères
array_unshift($Tabres,$car);
echo '<ul>';
foreach($Tabres AS &$res){
echo '<li>'.$res.'</li>';
}
echo '</ul>';
?>
Résultat :<?php
require("../config_inc.php");
$selec = $_POST["rechajax"];
$nb = strlen($selec);
if ($nb < 2) {
"";
}else {
$query_mots = "
SELECT
mots
FROM
aide_indexation
WHERE (
espaceid='xx'
OR
espaceid = 'yy'
)
AND
mots like '".mysql_real_escape_string($selec)."%'
ORDER BY
mots";
$result_mots = mysql_query($query_mots)or die(mysql_error());
if (mysql_num_rows($result_mots) > 0) {
//récupére les resultats dans un tableau
$TabRes = array();
while ($row = mysql_fetch_assoc($result_mots)) {
$Tabres[] = $row["mots"];
}
}
//ajout des premiers caractéres entrés par l'utilisateur
array_unshift($TabRes,$selec);
//création de la liste pour l'autocomp.
foreach($TabRes AS &$res){
echo '<ul>
<li>'.strtolower($res).'</li>
</ul>';
}
?>
Faut vraiment que je prenne des vacances ... Pour les vacances, moi aussi je devrais en prendre, surtout que le soleil a l'air de revenir !Je n'osais pas te le dire ... !!!
Je n'ai pas encore assez confiance en moi en php !
Je test tout ça, j'avais déjà implémenté ma boucle dans le code, faut voir le résultat maintenant !
Je te tiens au courant très vite