PHP MySQL CSV

Résolu/Fermé
DAG - 9 juil. 2008 à 16:10
 DAG - 10 juil. 2008 à 10:50
Bonjour,

J'ai un fichier Excel (csv) qui se présente de la façon suivante (avec un peu plus de champs et environs 5000 entrées par colonnes) :

NOM           PRENOM      ADRESSE
truc            muche        10, rue tata
machin        chouette     11, rue tutu


J'essaie de récupérer les champs pour pouvoir les mettre dans une base MySQL.
J'arrive à récupérer les colonnes entières de la façon suivante (j'ai une page html où je rentre le chemin du fichier qui me redirige vers ce code) :

function recupNom()
{
$file = $_FILES['file']['tmp_name'];
$handle = fopen($file,'r');
$row = 1;
while (($data = fgetcsv($handle, 0, ";")) !== FALSE) 
{
    echo "\n";
	echo $data[0] . "<br />\n";
}
fclose($handle);
}


Le problème c'est que ce code m'affiche toutes les valeurs à la suite :

NOM
truc
machin


J'aimerai réussir à récupérer seulement un champs d'une colonne, par exemple : le titre pour pouvoir ensuite créer une table avec des colonnes portant les noms qu'il faut.

Si quelqu'un a une idée ?

Merci d'avance

5 réponses

ghassen38 Messages postés 12 Date d'inscription jeudi 29 mai 2008 Statut Membre Dernière intervention 29 septembre 2008 4
9 juil. 2008 à 19:23
une fichier excel c'est pas une extesion .xls qu'il a ???
0
vignemail1 Messages postés 1246 Date d'inscription vendredi 8 octobre 2004 Statut Contributeur Dernière intervention 13 septembre 2019 259
9 juil. 2008 à 23:08
Un CSV est, il me semble, directement importable dans une base de données MySQL avec phpmyadmin.

Sinon concernant ton problème, c'est ton while.
Lorsque du fait le while, tu dis ne t'arrêtes pas avant la fin du fichier, il ne faut en faite le faire qu'une seul fois pour avoir la première ligne, récupérer ainsi les noms des champs, et enfin faire le while qui construit l'INSERT INTO avec le contenu de $data (que tu pourrais sans doute simplifier par un 'INSERT INTO table VALUES ('.implode(", ", $data).')' )
0
Bonjour,

Merci pour vos réponses.

ghassen38, oui, c'est bien du CSV que j'utilise. C'est beaucoup plus facile à manipuler que le XLS, car il te forme un fichier avec des lignes et un séparateur pour isoler les champs de la ligne (généralement le ";" ou la ",").
En gros tu te retrouve avec un fichier du type :
blablabla;tututututut;tatatatata;tititititi
tititititi;tututututut;tatatatata;blablabla

....

Moi, en fait ce que je veux faire, c'est récupérer les informations du fichier Excel champs par champs. Dans l'exemple que j'avais donné, je voudrais récupérer la valeur du premier champs (à savoir "NOM"), puis la valeur du deuxième champs ("PRENOM) et ainsi de suite jusqu'au bout de la ligne.
En fait, je veux récupérer tous les champs entre les ";" de la première ligne, dans un premier et ensuite dans le reste du fichier.

Une fois que j'aurais eu la valeur du premier champs je la stock en mémoire et je récupère le deuxième champs puis le troisième et ainsi de suite jusqu'au bout de la ligne.

Une fois arrivé au bout de la ligne, j'aurai toutes les info en mémoire pour créer ma table de la façon suivante :
CREATE TABLE `base`.`table`
(
`ID` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
`$champs1`  VARCHAR( 50 ) NOT NULL,
`$champs2` VARCHAR( 50 ) NOT NULL,
....
)


Je pourrais même mettre une petite boucle pour qu'il me créer les champs tout seul !

Je ne sais pas si je suis assez clair dans mes explications... Peut être existe-t-il des fonctions qui le fond déjà, car j'ai l'impression de coder quelque chose que déjà des personnes on eu besoin !


Sinon, vignemail1, oui il est possible de mettre un fichier excel dans une bdd grâce à la commande "LOAD DATA" :
LOAD DATA INFILE 'c:/test.csv' INTO TABLE TestLoadData.test FIELDS TERMINATED BY ';' ENCLOSED BY "" ESCAPED BY '\\' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;


Le problème c'est qu'il ne te créer pas les champs NOM, PRENOM... comme titre de la coIl les considère comme des données de la table et nom comme des champs titres.


Donc si quelqu'un a une idée ?...
0
J'ai trouvé !!
voila le code :

$file = $_FILES['file']['tmp_name'];		//Je récupère l'emplacement du fichier
$content = file_get_contents($file,'r');	        //J'ouvre le fichier
$content = explode(";", $content);	        //Je parcours le fichier en retenant que le séparateur est le ";"
print $content[0];				        //J'affiche la première valeur avant le premier ";"


C'est tout con, je n'utilisais pas la bonne fonction...

A+
0
vignemail1 Messages postés 1246 Date d'inscription vendredi 8 octobre 2004 Statut Contributeur Dernière intervention 13 septembre 2019 259
10 juil. 2008 à 10:37
Oui mais si une valeur d'un de tes champs contient ; alors ca marche pas.
0

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

Posez votre question
exact !
Il faut que je gère ça...Je ne sais pas trop comment je vais faire !

Je vais plancher !

Merci ! A+
0