Page 1 sur 2
Autocomplete
Posté : 14 nov. 2011, 21:37
par orell1
Bonsoir à tous,
j'ai ajouté un script d'autocomplete pour mon formulaire de recherche mais celui-ci ne fonction pas sur des requêtes de tyte text... En revanche sur un champs sql de type varchar(250) par exemple il n'y a pas de probleme...
Merci par avance.
<script>
$(document).ready(function() {
$("input#autocomplete").autocomplete({
source: [<?php
mysql_connect("loacalhost","root","");
/* selection de la base de donnée mysql */
mysql_select_db("table");
$sql = mysql_query("SELECT * FROM coordonnees");
while ($off = mysql_fetch_assoc($sql)) {
echo '"'.$off['activite].'",';
}
mysql_close(); ?>]
});
});
</script>
Re: Autocomplete
Posté : 14 nov. 2011, 22:53
par Ryle
Dans ton contexte, il n'y a pas de différence entre un champ de type texte et un varchar en dehors de la taille du champ... A tout les coups, ton champ texte contient une guillemet (qui ferme la chaine) ou des retours à la ligne (considéré par js comme une fin d'instruction) qui font planter le javascript généré...
Regarde le code source de la page que tu génères tu verras plus facilement ce qui pose problème

En fonction, suffira de backslasher les guillemets ou de remplacer les retours à la ligne physique par des "\\\n" que javascript pourra interpréter comme les retours à la ligne "\n" et qui ne couperont pas la chaine...
Re: Autocomplete
Posté : 14 nov. 2011, 23:12
par orell1
Merci pour ta réponse, il y a effectivement des saut de ligne entre chaque mot :
exemple : Nettoyage,
Nettoyage industriel
Penses-tu du coup qu'avec le code que j'ai noté précédemment que je puisse faire ce que je souhaite faire?
Merci
Re: Autocomplete
Posté : 15 nov. 2011, 00:12
par AB
Ah bah pourquoi tu fais pas une requête ajax standard vers une page php qui fera la requête et renverra le résultat ?
Re: Autocomplete
Posté : 15 nov. 2011, 00:41
par orell1
Bonsoir AB,
je n'y avais pas pensé

tout simplement parce que je ne sais pas faire...
J'ai réussi à adapter ce code en suivant un tuto mais de la à créer tout le systeme...
En revanche peut-être qu'il existe un tuto pour faire cela?
Merci
Re: Autocomplete
Posté : 15 nov. 2011, 01:07
par AB
Un tuto je sais pas mais y'a déjà
la doc
Faudra mettre l'adresse de ton fichier php dans le paramètre "source" de l'autocomplete
Code : Tout sélectionner
autocomplete({
autoFocus: true,
minLength: 2,
delay: 800,
appendTo: "#id_result",
source: "destination_fichier.php5",
...
ici je l'ai nommé "destination_fichier.php5". Et dans "destination_fichier.php5" tu pourras récupérer la variable $_GET['term'] et l'utiliser pour faire ta recherche dans ta requête. Ensuite tu fais ton tri en php et tu renvoies ce que tu veux avec un echo tout bête. Attention d'utiliser l'utf-8.
Re: Autocomplete
Posté : 15 nov. 2011, 01:18
par orell1
Je te remercie pour cette réponse rapide...
Je vais essayer de faire comme je peux avec le peu de connaissance et tes conseils.
Merci beaucoup pour ton aide.
Re: Autocomplete
Posté : 15 nov. 2011, 18:35
par Ryle
C'est vrai qu'avec ajax, c'est plus classe

(y a même un p'tit tuto super sympa, ludique et tout qui explique comment fonctionne ajax dans le forum FAQ

)
Sinon sans utiliser ajax, il suffit simplement de ne pas faire apparaitre les retours chariot dans le code javascript généré.. en gros, au lieu de
Il te faut générer le code
Et donc demander à php de remplacer les "\n" de ta chaine par "\\n" qui produiront la chaine "\n" au lieu d'un retour à la ligne dans le fichier html
Quelque chose du genre :
echo '"'.str_replace("\n", "\\n", $off['activite]).'",';
Re: Autocomplete
Posté : 15 nov. 2011, 18:38
par stealth35
plutôt faire un
addcslashes
echo addcslashes($str, "\0..\37\42\134");
Re: Autocomplete
Posté : 15 nov. 2011, 19:09
par orell1
Merci pour vos réponses,
j'ai essayé avec ça : echo '"'.str_replace("\n", "\\n", $off['activite']).'",'; mais cela ne fonctionne pas...
en ce qui concerne echo addcslashes($str, "\0..\37\42\134"); je n'ai pas compris ce qu'il y a entre parenthèses...
Merci beaucoup.
je viens de regarder dans la base et en exportant celle-ci les activités s'affichent comme ça :
Réalisation d''études mécaniques (plans 2D/3D),\r\nRéalisation de cahiers des charges,\r\nRéalisation de notices pour des machines spéciales de contrôle et d''assemblage,\r\nOutillages de presse,\r\nManutention,\r\nTout type de produits industriels
Re: Autocomplete
Posté : 16 nov. 2011, 23:44
par orell1
Bonsoir,
Personne n'a d'idées pour résoudre mon problème?
Merci par avance.
Re: Autocomplete
Posté : 18 nov. 2011, 14:03
par orell1
toujours pas d'idées?
Re: Autocomplete
Posté : 18 nov. 2011, 20:08
par AB
On t'a déjà donné des indications dans nos précédents messages. Qu'à tu essayé ?
Il faut faire la distinction entre l'autocomplete et la recherche dans ta bdd, ces sont deux choses distinctes.
Quand tu fais tes requêtes de recherche dans ta bdd, obtiens-tu les résultats souhaités (indépendamment de l'autocomplète). C'est par là qu'il faut commencer.
Re: Autocomplete
Posté : 18 nov. 2011, 20:14
par orell1
Bonsoir,
Je sais que j'ai reçu des explications mais après les avoir appliqués cela ne fonctionne toujours pas, notamment le \\n dommage pour moi.
Concernant mon moteur de recherche, il fonctionne très bien, je voulais juste ajouter un petit plus à celui ci, un peu du style de Google...
Merci.
Re: Autocomplete
Posté : 19 nov. 2011, 04:29
par AB
Comme je le disais plus haut à mon avis c'est plus instructif et aussi plus souple de travailler sur une page php séparée pour faire la requête.
Fais ta requête qui va bien en fonction de $_GET['term'] (variable envoyée par l'autocomplète de jquery) dans une page php externe et ensuite, toujours dans cette même page php tu récupère ton tableau de résultat (ex :$tab_result) que tu retourne avec un
echo json_encode($tab_result);
pour alimenter le résultat l'autocomplète.
C'est un peu différent que ton exemple de base mais beaucoup plus souple et évolutif, et au moins tu auras compris le principe de l'ajax que tu pourras réutiliser. Cela dit la plupart du temps on renvoie du code html en retour de la page php. Mais ici, l'autocomplète de jquery demande un tableau js en retour c'est pour cela qu'on utilise json_encode (avec un encodage utf-8) sur le tableau de résultats.
Plus de détails sur le principe
dans ce topic