traitement de fichier csv avec php
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.
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 !";
- }
- ?>
Hello.
Voilà comment je fais, c'est assez commenté tu devrais facilement pouvoir adapter à tes besoins :
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) ...
@+...
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) ...
@+...
J'avais déjà resolu mon problème .
Merci quand même pour ta réponse.
salut- @+
Merci quand même pour ta réponse.
salut- @+
Accès rapide :
Remonter 

