IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

importé un fichier csv en php


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 24
    Points : 17
    Points
    17
    Par défaut importé un fichier csv en php
    Bonjour, j'importe un fichier csv avec un script php pour mettre dans une base de donnée. Le problème est que le fichier CSV fait en excel n'est pas utf8... je ne sais pas comment faire pour l'encoder en utf8. La seul façon que j'ai trouver qui fonctionne c'est d'ouvrir le csv avec bloc notes et sauvegarder sous et là mettre en utf8...

    je me demandais si en php je ne pourrais mettre une fonction qui pourrait convertir le tout en utf8 avant de l'importer dans la BD

    voici mon script php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    if($_POST['Upload'])
    	{
    		mysql_query("DELETE FROM pricelisttmp");
     
    		$csv_filename = basename($_FILES['file_csv']['name']);
    		$target_path = "../csv/";
    		$target_path .= basename($_FILES['file_csv']['name']);
    		if (move_uploaded_file($_FILES['file_csv']['tmp_name'],$target_path)) {
    			$csv_file = fopen("../csv/".$csv_filename,"rb");
    			for ($row = fgetcsv($csv_file,1024);!feof($csv_file); $row = fgetcsv($csv_file,1024)) {
    				$j = sizeof($row);
    				for ($i = 0; $i<$j; $i++) {
    					if($row[$i] != "") {
    						list($product, $price, $units, $description, $spec) = split(";", $row[$i]);
    						$sql = "INSERT INTO pricelisttmp(Product,Price,Units,Description,Spec) VALUES('";
    						$sql .= mysql_real_escape_string(str_replace("’","'",$product)). "','";
    						$sql .= $price. "','";
    						$sql .= $units. "','";
    						$sql .= $description. "','";
    						$sql .= $spec. "'";
    						$sql .= ")";
    		                mysql_query($sql);
    					}
    				}
    			}
    			$data_tmp = mysql_query("SELECT * FROM pricelisttmp");
    			while ($row_tmp = mysql_fetch_array($data_tmp)) {
    				$data = mysql_query("SELECT * FROM pricelist WHERE Description = '".$row_tmp['Description'] ."'");
    				$num_rows = mysql_num_rows($data);
    				if ($num_rows>0) { //Data exists
    					//echo "Data exists for :" . $row_tmp['Description'];
    					$sql = "UPDATE pricelist SET Price = ";
    					$sql .= $row_tmp['Price'] .",";
    					$sql .= "Product = '". $row_tmp['Product'] ."' ";
    					$sql .= "Units = '". $row_tmp['Units'] ."' ";
    					$sql .= "Spec = '". $row_tmp['Spec'] ."' ";
    					$sql .= "WHERE Description = '". $row_tmp['Description'] ."'";
    				}
    				else { //New pricelist
    					//echo "Insertion for :" . $row_tmp['Description'];
    					$sql = "INSERT INTO pricelist(Product,Price,Units,Description,Spec ) VALUES ('";
    					$sql .= $row_tmp['Product'] ."',";
    					$sql .= $row_tmp['Price'] .",'";
    					$sql .= $row_tmp['Units'] ."','";
    					$sql .= $row_tmp['Description'] ."','";
    					$sql .= $row_tmp['Spec'] ."')";
    				}
    				mysql_query($sql);
    			}
    		}
    	}

  2. #2
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    bjr

    en 2 passes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    file_put_contents("../csv/".$csv_filename, utf8_encode(file_get_contents("../csv/".$csv_filename));

  3. #3
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    http://us2.php.net/manual/en/book.iconv.php

    sinon en shell tu dois avoir un dos2unix celon ta distrib.

  4. #4
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    je suis bete, en plaçant mieux le utf8_decode tu peux le faire en une seule passe.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par gene69 Voir le message
    bjr

    en 2 passes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    file_put_contents("../csv/".$csv_filename, utf8_encode(file_get_contents("../csv/".$csv_filename));

    mais où dans mon code je dois insérer ?

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    Relativement , cela a revient à détecter le jeux d'encodage d'un fichier, comme sur des posts récents ? Car ma foi, peu t’ont capter un flux de donnée en bit, ( bytes ) , quelque soit le bit de départ, et le convertir en utf-8, ASCII, etc ???

    Par exemple :

    un flux word -> je sais pas faire
    un flux html -> je sais faire

Discussions similaires

  1. [MySQL] importation fichier CSV avec php et mysql
    Par NapsterVB dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 08/10/2013, 10h01
  2. import d'un fichier csv en php
    Par badibad dans le forum Langage
    Réponses: 18
    Dernier message: 17/06/2011, 15h09
  3. Importer un fichier .csv avec php et PDO
    Par Touny dans le forum Langage
    Réponses: 6
    Dernier message: 05/03/2009, 17h45
  4. [CSV] Importer un fichier CSV ou OV2 dans une page PHP
    Par gpsevasion dans le forum Langage
    Réponses: 13
    Dernier message: 12/02/2009, 14h31
  5. Importation de fichier CSV vers une base Interbase
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 15/03/2005, 15h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo