traitement de fichier csv avec php

Répondre
celia
le 25/10/2007 à 16:51
celia
Bonjour à tous!
J'ai un souci, aufait je recupere via un formulaire html un fichier csv de 5 colonnes sépareés par des virgule.

Le téléchargement du fichier se passe bien.J'ai mis en place la function ajouter_matrice() qui me permet de recuperer les données du fichier csv telechargées.
Je recupere toutes les données du fichier dans un tableau $les_var.

J'ai du mal à partir de $les_var à recuperer les données d'une ligne du fichier csv pour inserer ensuite dans ma base.

Merci à ceux qui peuvent m'aider.

<?php
function ajouter_matrice($file) {
$les_var = array();
$row = 1; // initialisation de la 1ère ligne
$fp = fopen ($file,"r"); // ouverture du fichier en lecture seule
while ($data = fgetcsv ($fp, 1000, ";")) // 1 ligne = au maximum 1000 car. avec séparateur = ;
{
$num = count ($data);
print "<p> Insertion de la ligne n°".$row." du fichier csv : \n";
$row++;
for ($i=0; $i < $num; $i++){
list($no_site, $no_band, $distance, $taille,$intensite) = explode(",", $data[$i]);
array_push($les_var,$no_site, $no_band, $distance, $taille,$intensite);
}
}
return $les_var;
}

/*######################################################################*/

//TEST PUIS APPEL DE LA FUNCTION ajouter_matrice()
if( ($uploadfile) != ($uploaddir) ){
$les_var = ajouter_matrice($uploadfile);
//print_r($les_var);

$petit_tableau =array_chunk($les_var,5);
echo "Le nombre de petit tableau est:" .count($petit_tableau)."\n";
print_r ($petit_tableau)."<br>";
// for($i;$i<count($petit_tableau);$i++){
echo $no_site = $petit_tableau[0];
//}

list($no_site, $no_band, $distance, $taille,$intensite)= $les_var[$petit_tableau];
echo $no_site.'/'. $no_band.$distance.'/'. $taille.'/'.$intensite;


}else{
echo "Spécifier un fichier !";
}
?>
i M@N
le 26/10/2007 à 10:30
i M@N
Hello.

Voilà comment je fais, c'est assez commenté tu devrais facilement pouvoir adapter à tes besoins :
<?php



include('./base_connexion.php');

/*Préparation de la requête qui vide la table*/
/*pas forcément nécessaire, peut être commenté*/
$sql = 'TRUNCATE TABLE ma_table';

/*on exécute la requête*/
$result = mysql_query($sql);
/*on définit le fichier .csv*/

$fichier = "./fichier.csv";

/*On ouvre le fichier à importer en lecture seulement*/
if (file_exists($fichier)) {
$fp = fopen("$fichier", "r");
}
else {
/*le fichier n'existe pas*/
echo "Fichier introuvable !<br />Importation stoppée.";
exit();
}

while (!feof($fp)) {
/*Tant qu'on n'atteint pas la fin du fichier on lit une ligne*/
$ligne = fgets($fp,4096);
/*On récupère les champs séparés par , dans liste*/
$liste = explode( ",",$ligne);
/*On assigne les variables*/
$variable1 = $liste[0];
$variable2 = $liste[1];
$variable3 = $liste[2];
$variable4 = $liste[3];
$variable5 = $liste[4];
/*Ajouter un nouvel enregistrement dans la table*/
$sql = "INSERT INTO ma_table VALUES('$variable1','$variable2','$variable3','$variable4','$variable5')";
$result= mysql_query($sql);

if(mysql_error()) {
/*Erreur dans la base de donnees, sûrement la table qu'il faut créer*/
print "Erreur dans la base de données : ".mysql_error();
print "<br />Importation stoppée.";
exit();
}
else {
/*Tout va bien*/
print "$variable1 | $variable2 | $variable3 | $variable4 | $variable5<br />";
/*Fermeture du fichier*/
fclose($fp);

echo '<br /><b>TABLE A JOUR ...</b><br />';

/*Préparation de la requête d'optimisation*/
$sql = 'OPTIMIZE TABLE ma_table';
/*on exécute la requête*/
$result = mysql_query($sql);

echo '<br /><b>TABLE OPTiMiSEE ...</b><br />';

/*THE END*/
echo '<br /><b>O.K ! ALL DONE.</b><br />';

}

else {
echo'<br /><b>UPDATE FAiLURE !</b><br />';
}

?>

Par contre si tu as des caractères spéciaux comme des virgules dans tes champs, des apostrophes, des points ou que sais-je pense à protéger tes variables (avec un string_replace ou une regex sur $liste ou $variable1-5 par exemple) ...

@+...
One Love, One Heart, One Unity.
celia
le 26/10/2007 à 16:39
celia
J'avais déjà resolu mon problème .
Merci quand même pour ta réponse.

salut- @+
karousn
le 30/04/2012 à 11:01
karousn
Je tembe à la même probleme si tu peux @celia partage votre solution
Karzo
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours