champs text interactifs

champs text interactifs - PHP - Programmation

Marsh Posté le 11-06-2009 à 08:28:28    

Petite requête car je ne sais par quoi commencer...
 
Le but : l'utilisateur entre pour une recherche un code postal ; le souci étant qu'un code postal peut correspondre à plusieurs villes, donc je souhaiterai que lorsque l'utilisateur est en train de remplir le champ, une liste des possibilités apparaissent dans une liste en dessous.
 
On voit un exemple un peu comparable sur le site http://www.logic-immo.com.
 
Ce dont je dispose : une BDD avec l'index des villes et des codes postaux, les connaissances pour faire des recherches dans la BDD...
 
Question : est-ce que je suis condamné à faire quelque chose entièrement en javascript ? Il n'y a pas une solution un peu plus élégante ?


---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
Reply

Marsh Posté le 11-06-2009 à 08:28:28   

Reply

Marsh Posté le 11-06-2009 à 08:43:37    

oui , mais la partie js peut etre légère
le js peut être élégant  
 
sur l'evenement onkeyup de ton champ , tu lances une fonction js qui se charge d'aller récupérer la liste des possibilité déjà formattée en php , et tu l'injecte dans ta page


---------------

Reply

Marsh Posté le 11-06-2009 à 09:08:42    

Je vais voir de ce côté là ; cependant une petite question quand même, comment fait-on pour indiquer à la BDD de retourner toutes les données commençant par un motif donné ?

 
Code :
  1. $debut='pa';
  2. mysql_query("SELECT ville FROM geo WHERE ... et là je coince :D" );
 

Edit : c'est bon, opérateur LIKE.


Message édité par Yagmoth le 11-06-2009 à 09:10:37

---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
Reply

Marsh Posté le 11-06-2009 à 09:38:28    

Autre souci à présent, on dirait que ma base MySQL fait des siennes : quand je fais par exemple un  
 

Code :
  1. mysql_query("SELECT ville FROM geo WHERE ville LIKE 'p%'" )


 
Il me retourne bien quelques valeurs (Parisot, Pereille, Plaisance...) mais pas toutes les valeurs correspondantes (il manque par exemple Paris). Une idée ?


---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
Reply

Marsh Posté le 11-06-2009 à 09:44:39    

Yagmoth a écrit :

Autre souci à présent, on dirait que ma base MySQL fait des siennes : quand je fais par exemple un  
 

Code :
  1. mysql_query("SELECT ville FROM geo WHERE ville LIKE 'p%'" )


 
Il me retourne bien quelques valeurs (Parisot, Pereille, Plaisance...) mais pas toutes les valeurs correspondantes (il manque par exemple Paris). Une idée ?


 
Si ton but c'est de faire apparaitre une liste des villes commencant par tel ou tel motif de lettres, AJAX +  JS + PHP n'est pas la bonne méthode. C'est lourd pour rien.
 
Tu te contentes de générer via PHP la liste de toutes tes villes dans un tableau JS une fois pour toutes dès le départ et tu fais ta recherche ensuite en JS à l'évènement onkeyup ou onchange, cela dépend...


---------------
Expert en expertises
Reply

Marsh Posté le 11-06-2009 à 09:47:49    

Hermes le Messager a écrit :

 

Si ton but c'est de faire apparaitre une liste des villes commencant par tel ou tel motif de lettres, AJAX +  JS + PHP n'est pas la bonne méthode. C'est lourd pour rien.

 

Tu te contentes de générer via PHP la liste de toutes tes villes dans un tableau JS une fois pour toutes dès le départ et tu fais ta recherche ensuite en JS à l'évènement onkeyup ou onchange, cela dépend...

 

Je vais devoir me pencher un peu plus sur le JS et les tableaux associatifs en particulier alors (que je connais assez peu :/)

 

Mais ça m'intéresse quand même de savoir pourquoi la BDD n'arrive pas à me renvoyer la liste des villes par contre :D (et ceux d'autant plus que quand je fais une recherche similaire, mais par code postal, ça fonctionne :/)


Message édité par Yagmoth le 11-06-2009 à 09:59:01

---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
Reply

Marsh Posté le 11-06-2009 à 10:01:50    

le like est sensible a la casse tu fais sans doute ta recherche avec like 'p%'  et dans la db tu dois avoir 'Paris' (ou l'inverse)

Reply

Marsh Posté le 11-06-2009 à 10:07:20    

casimimir a écrit :

le like est sensible a la casse tu fais sans doute ta recherche avec like 'p%'  et dans la db tu dois avoir 'Paris' (ou l'inverse)


 
J'y ai pensé, j'ai déjà reremplie la base entièrement en minuscule, le problème persiste (et soit dis en passant, le LIKE '%p' me renvoyait bien des mots commençant en majuscules avant... donc la sensibilité à la casse ne doit pas exister sur des données de type varchar).


---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
Reply

Marsh Posté le 11-06-2009 à 10:14:43    

tu peux toujours essayer un
 
where TRIM(ville) LIKE 'p%';
 
Histoire de voir s'il n'y aurait pas des espaces mal placés...
 
Fectivement, LIKE n'est plus sensible à la casse dans Mysql depuis un certain temps.
 
Edith :
voire un select substring(ville, 0, 1) where ville LIKE '%p%'

Message cité 1 fois
Message édité par deliriumtremens le 11-06-2009 à 10:16:30
Reply

Marsh Posté le 11-06-2009 à 10:22:54    

deliriumtremens a écrit :

tu peux toujours essayer un

 

where TRIM(ville) LIKE 'p%';

 

Histoire de voir s'il n'y aurait pas des espaces mal placés...

 

Fectivement, LIKE n'est plus sensible à la casse dans Mysql depuis un certain temps.

 

Edith :
voire un select substring(ville, 0, 1) where ville LIKE '%p%'

 

Bingo, merci :jap:


Message édité par Yagmoth le 11-06-2009 à 10:25:36

---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
Reply

Marsh Posté le 11-06-2009 à 10:22:54   

Reply

Marsh Posté le 11-06-2009 à 10:26:45    

Alors nettoie vite ta table, parce qu'avec des espaces partout, tu vas être emmerdé rapidement.
 
UPDATE geo SET ville = TRIM(ville) !
 
Zou, et qu'on ne t'y reprenne plus.

Reply

Marsh Posté le 11-06-2009 à 10:38:39    

deliriumtremens a écrit :

Alors nettoie vite ta table, parce qu'avec des espaces partout, tu vas être emmerdé rapidement.
 
UPDATE geo SET ville = TRIM(ville) !
 
Zou, et qu'on ne t'y reprenne plus.


 
Faut engueuler le type qui en a mis dans son fichier scv :o


---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
Reply

Marsh Posté le 11-06-2009 à 12:15:36    

pour le javascript, y'a la lib script.aculo.us qui peut t'être utile pour l'ajax et éventuellement l'autocompletion ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 11-06-2009 à 13:41:56    

Hermes le Messager a écrit :

Si ton but c'est de faire apparaitre une liste des villes commencant par tel ou tel motif de lettres, AJAX +  JS + PHP n'est pas la bonne méthode. C'est lourd pour rien.
 
Tu te contentes de générer via PHP la liste de toutes tes villes dans un tableau JS une fois pour toutes dès le départ et tu fais ta recherche ensuite en JS à l'évènement onkeyup ou onchange, cela dépend...

Et donc faire un tableau JS avec les 36000 communes  :sweat:

Reply

Marsh Posté le 11-06-2009 à 14:03:57    

macgawel a écrit :

Et donc faire un tableau JS avec les 36000 communes  :sweat:


 
Ah ben c'est sur que s'il s'agit d'avoir toute la liste des communes de France et de Navarre, il va peut-être falloir envisager Ajax. Mais bon... J'espère que ton site va pas être trop fréquenté ou que tu as les reins solides, parce qu'une requête SQL par touche appuyée et par user, c'est pas non plus génial comme système hein...


---------------
Expert en expertises
Reply

Marsh Posté le 11-06-2009 à 14:08:31    

avec  , au pire, une mise en cache avec apc ( et de toute manière mysql qui a un cache)  , ça se fait très bien


---------------

Reply

Marsh Posté le 15-06-2009 à 13:46:02    

flo850 a écrit :

avec  , au pire, une mise en cache avec apc ( et de toute manière mysql qui a un cache)  , ça se fait très bien


 
En fin de compte j'ai installé la lib Prototype et script.aculo.us, j'espère que ça passera :D


---------------
L'ennemi est bête : il croit que c'est nous l'ennemi alors que c'est lui !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed