Récupérer donner dans fichier excel [Résolu]

flopad 531 Messages postés mercredi 28 septembre 2005Date d'inscription 6 mars 2009 Dernière intervention - 2 nov. 2005 à 17:17 - Dernière réponse : monoceros01 432 Messages postés vendredi 28 novembre 2003Date d'inscription 20 mars 2006 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

21 réponses

Meilleure réponse
monoceros01 432 Messages postés vendredi 28 novembre 2003Date d'inscription 20 mars 2006 Dernière intervention - 4 nov. 2005 à 13:33
3
Merci
<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à!

Merci monoceros01 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 85 internautes ce mois-ci

Commenter la réponse de monoceros01
monoceros01 432 Messages postés vendredi 28 novembre 2003Date d'inscription 20 mars 2006 Dernière intervention - 3 nov. 2005 à 04:32
0
Merci
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.
Commenter la réponse de monoceros01
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 3 nov. 2005 à 09:30
0
Merci
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.
Commenter la réponse de malalam
flopad 531 Messages postés mercredi 28 septembre 2005Date d'inscription 6 mars 2009 Dernière intervention - 3 nov. 2005 à 09:38
0
Merci
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?
Commenter la réponse de flopad
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 3 nov. 2005 à 09:57
0
Merci
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 ?
Commenter la réponse de malalam
flopad 531 Messages postés mercredi 28 septembre 2005Date d'inscription 6 mars 2009 Dernière intervention - 3 nov. 2005 à 10:03
0
Merci
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
Commenter la réponse de flopad
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 3 nov. 2005 à 10:13
0
Merci
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.
Commenter la réponse de malalam
flopad 531 Messages postés mercredi 28 septembre 2005Date d'inscription 6 mars 2009 Dernière intervention - 3 nov. 2005 à 13:02
0
Merci
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...?
Commenter la réponse de flopad
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 3 nov. 2005 à 13:12
0
Merci
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 :-)
Commenter la réponse de malalam
flopad 531 Messages postés mercredi 28 septembre 2005Date d'inscription 6 mars 2009 Dernière intervention - 3 nov. 2005 à 13:58
0
Merci
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...?
Commenter la réponse de flopad
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 3 nov. 2005 à 14:05
0
Merci
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...)
Commenter la réponse de malalam
monoceros01 432 Messages postés vendredi 28 novembre 2003Date d'inscription 20 mars 2006 Dernière intervention - 3 nov. 2005 à 14:20
0
Merci
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 :
Commenter la réponse de monoceros01
monoceros01 432 Messages postés vendredi 28 novembre 2003Date d'inscription 20 mars 2006 Dernière intervention - 3 nov. 2005 à 14:24
0
Merci
@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.
Commenter la réponse de monoceros01
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 3 nov. 2005 à 14:42
0
Merci
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.
Commenter la réponse de malalam
flopad 531 Messages postés mercredi 28 septembre 2005Date d'inscription 6 mars 2009 Dernière intervention - 3 nov. 2005 à 14:55
0
Merci
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?
Commenter la réponse de flopad
monoceros01 432 Messages postés vendredi 28 novembre 2003Date d'inscription 20 mars 2006 Dernière intervention - 3 nov. 2005 à 14:59
0
Merci
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 ;)
Commenter la réponse de monoceros01
flopad 531 Messages postés mercredi 28 septembre 2005Date d'inscription 6 mars 2009 Dernière intervention - 3 nov. 2005 à 15:03
0
Merci
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..... ;-)
Commenter la réponse de flopad
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 3 nov. 2005 à 15:10
0
Merci
Vas voir les définitions des fonctions que je t'ai donné, et réflêchi 30s... :-) Il te reste à voir explode, là.
Commenter la réponse de malalam
flopad 531 Messages postés mercredi 28 septembre 2005Date d'inscription 6 mars 2009 Dernière intervention - 4 nov. 2005 à 12:48
0
Merci
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";
}


?>
Commenter la réponse de flopad
flopad 531 Messages postés mercredi 28 septembre 2005Date d'inscription 6 mars 2009 Dernière intervention - 7 nov. 2005 à 10:25
0
Merci
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
Commenter la réponse de flopad

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Récupérer donner dans fichier excel - page 2