Récupérer donner dans fichier excel

Résolu
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009 - 2 nov. 2005 à 17:17
monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006 - 7 nov. 2005 à 16:11
Bonjour tout le monde!

Voilà ce que je souhaiterais mettre en place (annuaire entreprise sur un intranet):
Je fais un formulaire en php, l'utilisateur tape le nom de la personne qu'il recherche, cette recherche s'effectue sur un fichier excel. Je voudrais si le nom est bien trouvé extraire la ligne correspondante et la mettre en page dans une page html.

Pourriez vous svp me donner quelques idées pour démarrer...?

Merci d'avance.

21 réponses

monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006
4 nov. 2005 à 13:33
<hr size= "2" width="100%"><tt>

string</tt>
fread (
<tt>resource</tt>

<tt>handle</tt>
,
<tt>int</tt>

<tt>length</tt>
)

<tt>fread</tt>
lit jusqu'à
<tt>length</tt>

octets dans le fichier référencé par
<tt>handle</tt>
.
La lecture s'arrête lorsque
<tt>length</tt>
octets
ont été lus, ou que l'on a atteint la fin du fichier, ou
qu'une erreur survient (le premier des trois).



<hr size ="2" width= "100%">
<tt>string</tt>
file_get_contents (
<tt>string</tt>

<tt>filename</tt>
,
<tt>bool</tt>

<tt>use_include_path</tt>
,
<tt>resource</tt>

<tt>context</tt>
,
<tt>int</tt>

<tt>offset</tt>
,
<tt>int</tt>

<tt>maxlen</tt>
)




<tt></tt> <tt>file_get_contents</tt>
retourne le fichier

<tt>filename</tt>
dans une chaîne, à partir
de la position
<tt>offset</tt>
, et jusqu'à

<tt>maxlen</tt>
octets.
En cas d'erreur,
<tt>file_get_contents</tt>
retourne

<tt>FALSE</tt>
.






Vous pouvez utiliser l'option
<tt>use_include_path</tt>
:
en la mettant à "1", vous rechercherez aussi dans le dossier

<tt>include_path</tt>
.



<hr size ="2" width="100%">Voilà ce que j'ai dans la doc. fread() et file_get_contents()
renvoi tout deux une chaîne de caractères contenant tout le fichier (si
tu n'as mis que le premier paramètre). Donc soit tu utilises l'un, soit
tu utilise l'autre. Mais il faut faire attention, fread à une ressource comme premier paramètre (la ressource retourné par fopen(), $handle dans ton exemple) alors que file_get_contents a une url.



Ensuite il te faut traiter la chaîne résultante. un fichier CVS est
constitué d'enregistrements séparés par des retours chariot, et chaque
enregistrement est constitué d'une série de données séparées par une
virgule ou un point virgule le plus souvent.



Robert,Webdeveloppeur,26ans

Jack,Patissier,32ans

etc...



Donc la première étape sera de récupérer chaque ligne :

$ligne = explode("\n",$content) ;
// \n voulant dire retour chariot dans s'il est dans des
doubles quotes



Ensuite, pour chaque ligne, tu dois récupérer les données de chaque champ séparées par une virgule :

while(list($key,$val) = each($ligne) )

{

$data[$key] = explode(';',$val);

}

Et là tu obtiendra un tableau à deux dimensions dans lequel tu
pourra chercher les informations que tu désires. En effet la variable
$data contiendra :

Array(

0 => Array (

0 => 'Robert',

1 => 'Webdeveloppeur',

2 => '26ans'

),

1 => Array (


0 => 'Jack',


1 => 'Patissier',


2 => '32ans'


),

etc...

) ;

Voilà!
3
monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006
3 nov. 2005 à 04:32
Peut-être devrais-tu exporter tes données excel en CSV et te servir du
fichier ainsi obtenu pour remplir une base de données MySQL et coder un
système de recherche en php.



C'est ce que je ferais je pense.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
3 nov. 2005 à 09:30
Hello,

je passerais aussi par du CSV. Par contre, tu peux éventuellement parser directement ton CSV, sans passer par une bdd. Mais ce sera plus rapide en utilisant mysql en effet (et plus simple). Le truc c'est que ça va t'obliger à faire des imports -réguliers je suppose- de ton fichier excel.
Faut voir...dépend de tes contraintes.
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
3 nov. 2005 à 09:38
Merci pour vos indications.
En fait il est vrai que je préfère ne pas utiliser de bdd car c'est une secrétaire qui doit mettre à jour ce fichier excel contenant l'annuaire de société...
Sinon comment dois je m'y prendre pour rechercher en direct sur mon fichier csv?
0

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

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
3 nov. 2005 à 09:57
Un fichier csv est composé de :

données, d'un séparateur (généralement le point-virgule, parfois la virgule) toujours le même, et de retours chariots.

Une ligne (donc avant un retour chariot) correspond à un enregistrement (en gros).

Mais parfois, ils sont plus chaotiques que ça... ;-)



Bref...je ne sais pas quoi te conseiller sans avoir plus de détails :
quelles informations y trouve t on ? Lors de cette "recherche", est-il
possible de trouver l'information recherchée à plusieurs endroits ?
Quel est le format exact de ton fichier ? As-tu des points de repère
sur ce fichier ?
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
3 nov. 2005 à 10:03
Voici les infos que l'on y trouve :
Nom/Prénom, Société, Service, Téléphone fixe, Fax, Portable, Abrégé, Adresse mail.
Le format exact de mon fichier à l'heure actuelle est xls.
Ormis le numéro de fax qquesoi et les numéros de téléphone fixe, aucune info ne se recoupe.
En fait j'aimerais dans un premier temps pouvoir faire une recherche par Nom et puis on verra pour améliorer par la suite lorsque j'aurai compris comment tout ca fonctionne...

Merci
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
3 nov. 2005 à 10:13
Alors, c'est plus simple...il faut convertir le fichier en csv, sinon tu vas galérer.

Mais ensuite, tu peux créer une etite fonction/classe qui va parser le
fichier, permettant par exemple un accès direct ligne/colonne.; sachant
que chaque ligne est séparée par un retour chariot, et chaque colonne
de chaque ligne, par un point-virgule.

A priori, les noms seront toujours à la même colonne, pour chaque ligne...donc, ça devient facile :-)

Tu auras besoin d'ouvrir ton fichier évidemment...puis de le parser.
Par exemple, tu peux le stocker dans un tableau php, fait de la même
manière que ton fichier, et y accéder ainsi directement.
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
3 nov. 2005 à 13:02
Euh, ... peux tu me détailler un bout de code que je pourrais utiliser, ou les commandes qu'il va falloir que j'utilise pour m'aider à avancer...?
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
3 nov. 2005 à 13:12
Ben par exemple :



fopen()

file_get_contents()

explode()

puis in_array() pour la recherche...ou array_search() ça dépend comment tu fais ton bin's :-)
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
3 nov. 2005 à 13:58
est ce que le début pourrait ressembler à ça?

<?
$form_recherche="<form method=GET>
Nouvelle recherche :

</form>";
?>


<?
$file = "Annuaire.csv";
$Annu = fopen("$file","r");

Comment puis je utiliser le file_get_contents...?
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
3 nov. 2005 à 14:05
Lol, oui, ça pourrait...



Sauf que...:

<form method="post" action="">







bref ton html laisse à désirer.



file_get_contents ()

http://fr2.php.net/manual/en/function.file-get-contents.php

Ca va te permettre de lire le contenu de ton fichier et de le stocker
dans une variable de type chaine. Mais tu peux aussi utiliser fread, et
extirper ligne à ligne (peut-être plus simple), et boucler sur chaque
ligne.

Ensuite, tu vas exploser tout ça pour mettre chaque valeur dans un
enregistrement d'un tableau. Et tu pourras ainsi faire une recherche
sur ton tableau.



Bon on peut compliquer un peu, pour que ce soit plus pratique et
utile...un tableau associatif par exemple, ce serait pas mal
($tab['nom'] => array ('Robert', 'Depardieu' etc...), $tab['prenom']
=> array ('Jean', 'Bernard', etc...), etc...)
0
monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006
3 nov. 2005 à 14:20
Le input hidden est inutile, tu as oublier de mettre des " " autour
de certaines valeurs d'attributs et les doivent se
terminer par un / de même que les
tant qu'on y est :p (le
premier juste après <form method="GET"> étant inutile car un
élément FORM est de type block donc impliquera un retour à la ligne)



Comme ça :
0
monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006
3 nov. 2005 à 14:24
@malalam > le method="get" ne pose pas vraiment de problème pour un
champ de recherche. En plus il peut permettre éventuellement de
sauvegarder/envoyer le lien correpondant à la recherche. Un champ de
recherche comme celui-ci ne posera pas de problème de taille dans l'url
je pense.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
3 nov. 2005 à 14:42
Heu en fait, j'ai mis post par habitude...je ne ralais pas après le
get, mais après l'absence de guillemets pour délimiter la valeur des
attributs html. Lol. C'est tout.
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
3 nov. 2005 à 14:55
Alors est ce que ceci pourrait coller please...?

<?
$file = "Annuaire.csv";
$handle = fopen($file,"r");
$contents = fread ($handle, filesize ($file));
fclose ($handle);
?>

Comment faire après ça?
0
monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006
3 nov. 2005 à 14:59
flopad > apprendre à coder par soi-même est comme un travail de
détective :) . Tu dois te poser les bonnes questions et trouver dans la
documentation les moyens d'y répondre.



Indice : demandes-toi ce qu'il y a dans $contents et quoi en faire ;)
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
3 nov. 2005 à 15:03
C'est ce que j'essaie de faie mais si tu veux, j'essaie de mettre des choses en place et le développement n'est pas mon domaine et je pose toutes ces questions pour essayer de gagner un peu de temps tout en "essayant " de comprendre tout ça..... ;-)
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
3 nov. 2005 à 15:10
Vas voir les définitions des fonctions que je t'ai donné, et réflêchi 30s... :-) Il te reste à voir explode, là.
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
4 nov. 2005 à 12:48
Désolé de revenir pour la énième fois à la charge mais que dois je mettre à la suite de file_get_contents.....?
Le reste est il potable...?

<FORM ACTION="Recherche.php" METHOD="POST">
Tapez le nom que vous recherchez, puis validez :

</FORM>



<?
$_POST['NOM'];
?>



<?



$file = "Annuaire.csv";
$handle = fopen($file,"r");
$contents = fread ($handle, filesize ($file));
fclose ($handle);
$tableau = explode (",", $contents);
if file_get_contents ('NOM') {



}
else {
echo "La personne que vous recherchez n'a pas été trouvée dans l'annuaire";
}


?>
0
flopad Messages postés 528 Date d'inscription mercredi 28 septembre 2005 Statut Membre Dernière intervention 6 mars 2009
7 nov. 2005 à 10:25
Merci beaucoup pour cette réponse!
Maintenant, comment je dois faire pour venir chercher dans la variable $data si le nom recherché s'y trouve et afficher les infos le concernant...?

Merci encore
0
Rejoignez-nous