Recherche csv

Signaler
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009
-
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009
-
Bonjour, je veux faire une recherche sur un fichier csv mais cela ne marche pas......
En fait, je veux rechercher la variable tapée par l'utilisateur et si elle existe l'afficher dans une page html...
Voici mon code est ce que qq'un peut m'aider please....????? Merci d'avance

<form action="Recherche.php" method="post">




</form>



<?
if (isset($_POST['nom'])) // Si un nom est rentré


{
$lines = file('annuaire.csv');
foreach($lines as $v) {
$datas = explode(';', $v);
if(in_array('nom', $datas)) {
print_r($datas); }
}


}
?>

22 réponses

Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
9
Salut,



On dirait que tu ne connais pas cette magnifique fonction :

fgetcsv();



Je pense que c'ira mieux avec...



A+
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Effectivement....
Mais je voulais deja savoir ce qu'il fallait changer ou ajouter dans mon code pour que ca fonctionne...???
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
9
Tu as oublié de récupérer la valeur de $_POST['nom'];



Je te propose un truc comme ça :







// on récupère le nom si existe, sinon FAUX

$nom = isset($_POST['nom'] ? $_POST['nom'] : false;



if ( $nom ) { // si un nom (!!! autre que '' ou '0' ou 'null' !!!)

$fp = fopen(/*...*/) or die('erreur ouverture fichier');

while( $csv = fgetcsv($fp) or !feof($fp) ) { // on récupère un tableau pour chaque ligne

if( in_array($nom, $csv) ) print_r($csv);

}

fclose($fp);

}





note :

il existe aussi array_search qui renvoi la position de l'objet cherché...

ex :



// on récupère le nom si existe, sinon FAUX


$nom = isset($_POST['nom'] ? $_POST['nom'] : false;





if ( $nom ) { // si un nom (!!! autre que '' ou '0' ou 'null' !!!)


$fp = fopen(/*...*/) or die('erreur ouverture fichier');


while( $csv = fgetcsv($fp) or !feof($fp) ) { // on récupère un tableau pour chaque ligne


if( ($pos = array_search($nom, $csv))===false ) print_r($csv[$pos]);


}


fclose($fp);


}





Note :
Avant PHP 4.2.0, array_search() retournait
<tt>NULL</tt> en cas d'échec, au lieu de <tt>FALSE</tt>.





En fait, tu avais fait plein de confusion entre tes variables...



A+
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
9
Quelques petites erreur de syntaxes et autre correctifs...





$nom = isset($_POST['nom'] ) ? $_POST['nom'] : false;



while( ($csv =fgetcsv($fp)) or !feof($fp) ) {
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Je comprends pas, ca ne marche pas, voici mon code :

<form action="Recherche.php" method="post">




</form>



<?
// on récupère le nom si existe, sinon FAUX
$nom = isset($_POST['nom']) ? $_POST['nom'] : false;
$file = "Annuaire.csv";


if ( $nom ) { // si un nom (!!! autre que '' ou '0' ou 'null' !!!)
$fp = fopen($file, 'r') or die('erreur ouverture fichier');
while( ($csv = fgetcsv($fp)) or !feof($fp) ) { // on récupère un tableau pour chaque ligne
if( in_array($nom, $csv) ) print_r($csv);
}
fclose($fp);
}


?>
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
9
Oui...



Qu'est ce qui ce passe au juste ?

=> Rien, ni que dalle

=> Une erreur





Au lieu de print_r(), utilises var_export().

var_export() affiche toujours quelque chose...





Autre chose, places cette ligne au sommet de ton script :

error_reporting(E_ALL);

Grâce à ça, TOUTES les erreurs seront affichées...





A toute !
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
9
Puis même, tant qu'on y est, et si ton fichier Annuaire.csv n'est pas trop gros, force l'affichage quoi qu'il arrive :









// on récupère le nom si existe, sinon FAUX

$nom = isset($_POST['nom']) ? $_POST['nom'] : false;

$file = "Annuaire.csv";
if ( $nom ) { // si un nom (!!! autre que '' ou '0' ou 'null' !!!)
$fp = fopen($file, 'rt') or die('erreur ouverture fichier');


$i = 0;

while( ($csv = fgetcsv($fp)) or !feof($fp) ) { // on récupère un tableau pour chaque ligne
if( ($pos = array_search($nom, $csv))===false ) print_r($csv[$pos]);

else echo "Pas trouvé '$nom' ligne '$i'
";

$i++;

}
fclose($fp);
}
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
9
Alors ?
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Salut et merci beaucoup de ton aide mais ca ne fonctionne pas avec le code suivant, en fait quand je tape le nom que je recherche, ca ne m'affiche rien , pas d'erreur, que dalle....

Que faire?????

<form action="Recherche.php" method="post">




</form>



<?
error_reporting(E_ALL);


// on récupère le nom si existe, sinon FAUX
$nom = isset($_POST['nom']) ? $_POST['nom'] : false;
$file = "Annuaire.csv";


if ( $nom ) { // si un nom (!!! autre que '' ou '0' ou 'null' !!!)
$fp = fopen($file, 'rt') or die('erreur ouverture fichier');
$i = 0;
while( ($csv = fgetcsv($fp)) or !feof($fp) ) { // on récupère un tableau pour chaque ligne
if( in_array($nom, $csv) ) var_export($csv);
$i++;
}
fclose($fp);
}
?>
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
9
Est-ce qu'il affiche cette ligne au moins ?

else echo "Pas trouvé '$nom' ligne '$i'
";
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Oui, quand je tape un nom, ca me dit pas touvé 'nom' ligne 0.........jusqu'a ligne 612....
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
9
Ca te dit pas trouvé 'nom'

ou pas trouvé [Le nom que tu cherches] ???
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Ca me dit pas trouvé le nom que je cherche
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
9
Donc, ton code fonctionne à merveille...



Deux solutions :

* ce que tu cherche n'existe pas dans Annuaire.csv

=> vérifie à la mimine qu'il existe bien ( ATTENTION A LA CASSE, AU ESPACES, AU ACCENTS, ...)


* Annuaire.csv est "mal-formé" ce qui fait que par manque de chance, justement ce que tu cherche n'est pas lu comme csv.

=>Va te renseigner sur fgetcsv car on peut lui donner
plus de paramètres au cas où le fichier ne soit pas dans un format CSV
"standard".






J'ai peur de ne plus pouvoir grand chose à partir d'ici !!!



Bonne chance
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Je sais pas trop, comment est ce que je peux vérifier que mon fichier csv est correct???
A la base, c'etait un fichier excel que j'ai transformé en csv...
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
9
Est-ce que ton fichier Excel comprennait ligne ?

Si oui, l'exportation semble bonne





Pour chercher $nom à la main, ouvre ton fichier Annuire.csv dans un éditeur de texte et Edition>Rechercher>$nom>Enter
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Quand je recherche à la main en ouvrant mon csv dans le bloc note, ca trouve.

Que faire je suis largué....?????
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Quand il me dit qu'il ne me trouve pas le nom recherché ,il me met 'nom pas trouvé' entre ' ' , est ce que c'est pas ca qui cloche on dirait qu'au lieu de chercher nom, ca cherche 'nom'...?
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
9
NON !!!



echo "Pas trouvé '$nom' ...







Je confirme, le code est BON... Alors, peut-être un peitt tour sur un
tutorial PHP te ferait du bien et t'ouvrir les portes de la
perception...





Bonne chance!
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Oui désolé j'avais pas fait attention...
Par contre ca fonctionne bien en effet, mon fichier csv n'etait pas bon, j'ai remplacé les ; par des , pour les séparateurs et c'est ok!
Encore une derniere question, comment je peux faire pour mettre en page ces infos récupéres dans le style
Nom :
Prénom :
Téléphone :
....etc