Autocomplete via fichier csv

Eléphanteau du PHP | 34 Messages

16 juin 2012, 09:49

Bonjour à tous,

Je suis en train de créer une appli php. Je voudrais savoir comment récupérer la valeur(numéro de tel) d'un input afin de le rechercher un fichier csv et remplir les autres inputs avec les valeurs correspondantes à ce numéro.

Je m'explique, j'ai un fieldset dans mon formulaire dans lequel il y à divers input, on peut rentrer le numéro, le nom l'utilisateur etc...
autocomplete.jpg
De plus j'ai accès à un csv servant à l'origine pour l'annuaire outlook donc la structure est la suivante:
identifiant;nom;prenom;@mail;service;telephone;batiment
identifiant;nom;prenom;@mail;service;telephone telephone2;batiment

J'aimerai que lorsque l'on rempli le champ numéro d'appel ce dernier active automatiquement une recherche dans le fichier csv afin de vérifier que le numéro existe (avec une boucle en cas de changement ulterieur du numéro) et si c'est le cas on rempli les autres input qui suivent avec les infos qui leurs correspondent (enfin ce qui est dispo, car il peut manquer l'@mail ou autre)

Après j'ai crée mes inputs de cette manière et je sais pas s'il y a un truc particulier à faire pour faire cette recherche automatique et remplissage automatique si numéro existant:
<form name="form_demande" method="post" action="../formulaires_traitement/traitement_demande.php">
	<div id="num_appel"><fieldset style="border:none">	
		<div id="fourcolonnes_centreg"> <!-- Mettre au milieu à gauche du fieldset-->
			<span class="num_appelant">
				<label for="num_appelant">N° de l'appelant: </label>
				<input type="text" name="num_appelant" id="num_appelant" placeholder="ex: 34100" />
			</span>
		</div>
		<div id="fourcolonnes_centred"> <!-- Mettre au milieu à droite du fieldset-->
			<label>Date Appel: </label>
			<input type="text" id="date_appel" name="date_appel" value="<?php echo date('d-m-Y'); ?>" /> <!-- Affichage du calendrier avec date du jour rentrer automatiquement -->
		</div>
		<div id="fourcolonnes_droite"> <!-- Mettre à droite du fieldset-->
			<label>Heure Appel: </label>
			<input type="text" id="timepicker" name="heure_appel" value="<?php echo date('H:i'); ?>" /> <!-- Affichage de l'heure: Rentrer automatiquement -->
		</div>
	</fieldset>
	</div>
	<div class="infoglobales"><fieldset>
		<legend>Informations Globales</legend>
			<div id="infoglobalemilieu">
				<span>
					<label for="nom_demandeur">Demandeur: </label>
					<input type="text" name="nom_demandeur" id="nom_demandeur" maxlength="30" />
				</span>
				<br />
				<span>
					<label for="service">Service: </label>
					<input type="text" name="service" id="service" maxlength="50" />
				</span>
			</div>
			<!-- Block de droite du fieldset Infoglobale -->
			<div id="infoglobaledroite">
				<span>
					<label for="batiment">Bâtiment: </label>
					<input type="text" name="batiment" id="batiment" maxlength="10" />
				</span>
				<span>
					<label for="local">Local: </label>
					<input type="text" name="local" id="local" />
				</span>
			</div>
		</fieldset>
	</div>
</form>
ex de fichier csv:
------------------------------------------------------------------------------------------------------------------
10101010;Dupont;Alfred;[email protected];MON/PTIT/SERVICE;0380808080 0320202020; Bt 012
10101011;Dupont;Henri;[email protected];CINE DU COIN;0380808081; Bt 035
10101012;Dupond;Jean Claude;[email protected];ESSENCE;0380808082; Bt 122
10101013;Dupond;Antoinette;[email protected];POMPIER;0380808083; Bt 135
10101014;Dubois;Fredreric;[email protected];DANS LE BOIS;0380808084; Bt 148
10101015;Faitenfler;Ilsé;[email protected];PAS DE TRAVAIL;0380808085; Bt 160
10101016;Inconnu;Les;[email protected];LUI ON SAIT PAS;0380808086; Bt 170
-----------------------------------------------------------------------------------------------------------------------
Est-ce que quelqu'un sait comment faire ceci? sachant qu'en plus il arrive qu'une personne ait 2 num

merci d'avance parce que la j'avoue ne pas savoir faire ce style d'autocomplete

maxredphenix
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Eléphant du PHP | 171 Messages

16 juin 2012, 10:24

Bonjour,

Je te propose de te pencher du côté des expressions régulières qui te permettront de faire aisément ce que tu recherches.

http://www.php.net/manual/fr/book.pcre.php

Pour lancer automatiquement la recherche lorsque qu'un numéro est saisi et remplir les autres champs automatiquement, il te faudra utiliser du Javascript et regarder du côté de l'Ajax, qui appellera ta page qui fais la recherche (grâce au expression régulière) et elle lui retournera les autres informations en réponse si elle existe.

Ça va te faire pas mal de lecture si tu n'as jamais utilisé tout ça, mais ça ne peut t'être que bénéfique car très utile. N'hésite pas à reposter si tu ne comprends pas trop.

Je te conseille de d'abord t’entraîner sur une page sans traitement Ajax ou autre pour maîtriser les expressions régulières et réussir à faire ce que tu recherches et d'ensuite y mettre en oeuvre avec un traitement Ajax.

Bon courage !
Le bon jugement s'apprend par l'expérience qui s'acquiert en partie par le mauvais jugement.

Eléphanteau du PHP | 34 Messages

16 juin 2012, 18:00

Bonjour,

merci pour ta réponse, je vais regarder ton lien et faire un tour du côté de js pour voir comment faire, mais le peu que je viens de regarder m'annonce que je risque d'en baver un peu parce que je suis vraiment débutant.

Encore merci pour ton aide.

maxredphenix

Eléphanteau du PHP | 34 Messages

16 juin 2012, 18:41

Juste comme ça,

j'ai commencé à lire certain truc sur les regex, pour savoir si par la suite je vais dans le bon sens:
- Je mets une boucle via js dans lequel je récupère la valeur de l'input et je la mets dans une variable.
- Je fais une regex ex:preg_match qui recherche cette variable dans le csv
- Le regex me sort un tableau qui convient les valeurs qui correspondent au numéro: result[0], result[1], result[2], result[3]
- J'affecte chaque ligne du tableau à un input:
- Demandeur = result[0]
- Bâtiment = result[1]
- Service = result[2]
- Local = result[3]

C'est un truc un peu dans ce genre la?

Merci

Eléphant du PHP | 171 Messages

17 juin 2012, 14:17

J'aurais plus vu une simple expression qui va te retourner toute la ligne correspondant au numéro.
Exemple on veut rechercher le numéro 10101012. L'expression serait alors celle ci :

Code : Tout sélectionner

^(10101012;.*)$


Bien évidemment si tu as lu la documentation de PHP sur la fonction preg_match, tu as pu voir que tu peux faire passer une variable dans l'expression. A toi de modifier l'expression en conséquence dans ton script PHP :wink:

Ensuite, tu fais un explode du résultat avec comme caractère séparateur le ";" et la tu auras chacun de tes champs dans un tableau que tu pourras exploiter.
C'est plus rapide de faire comme ça et moins compliqué que de tout faire grâce à une expression régulière.

Tu as déjà fait toute la partie traitement arrivé là. Je te donne un peu d'aide pour la suite.
En Ajax, on utilise souvent le Json pour retourner des résultats. PHP propose une fonction très pratique qui permet de convertir un tableau PHP en Json.
Tout simplement json_encode :P

Voilà je te laisse découvrir tout ça et finaliser ta partie traitement.

En passant, je t'ai donné l'expression régulière mais si tu souhaites t'entraîner sur les Regex, je te conseille ce petit site que je trouve très pratique : http://www.gethifi.com/tools/regex
Il y en a d'autres mais c'est celui que je préfère lorsque je veux tester mes expressions.
Le bon jugement s'apprend par l'expérience qui s'acquiert en partie par le mauvais jugement.