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 :

[CSV] Code PHP pour générer un CSV


Sujet :

Langage PHP

  1. #1
    Membre actif
    Profil pro
    Developpeur web et Access VBA
    Inscrit en
    Janvier 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur web et Access VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 457
    Points : 203
    Points
    203
    Par défaut [CSV] Code PHP pour générer un CSV et le réintégrer
    Bonjour,

    J'ai cherché dans la FAQ sans résultat, mais je ne suis certainement pas bon dans les recherches...
    Voila j'ai tapé ce code :
    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
    // export données vers xls
    //Premiere ligne = nom des champs (si on en a besoin)
    $csv_output .= "ID;REF;Titre;Titre En;Petite description Fr; Petite description En;Description illimitée Fr;Description illimitée En;Poids;HT;TTC;Pro HT;Pro TTC;ID Famille;Famille;ID Sous-Famille;Sous-Famille";
    $csv_output .= "\n";
     
    //Boucle 
        while($data = mysql_fetch_array($req)) {
    	$fiche = str_replace("\r\n","\n",$data['fi_fiche']);
    	$fiche = str_replace("\"","",$fiche);
     
    	$fiche_en = str_replace("\r\n","\n",$data['fi_fiche_en']);
    	$fiche_en = str_replace("\"","",$fiche_en);
     
    	$descript_fr_pt  = str_replace("\r\n","\n",$data['fi_descript_fr_pt']);
    	$descript_fr_pt = str_replace("\"","",$descript_fr_pt);
     
    	$descript_en_pt = str_replace("\r\n","\n",$data['fi_descript_en_pt']);
    	$descript_en_pt = str_replace("\"","",$descript_en_pt);
     
    	$descript_fr_grd = str_replace("\r\n","\n",$data['fi_descript_fr_grd']); 
    	$descript_fr_grd = str_replace("\"","",$descript_fr_grd);
     
    	$descript_en_grd = str_replace("\r\n","\n",$data['fi_descript_en_grd']);
    	$descript_en_grd = str_replace("\"","",$descript_en_grd);
     
    	$poids = str_replace(".",",",$data['fi_poids']);
    	$prixHT = str_replace(".",",",$data['fi_prix_HT']);
    	$prixTTC = str_replace(".",",",$data['fi_prix_TTC']);
    	$prixProHT = str_replace(".",",",$data['PrixProHT']);
    	$prixProTTC = str_replace(".",",",$data['PrixProTTC']);
    	$csv_output .= "$data[Id_fiche];$data[fi_ref];$fiche;$fiche_en;$descript_fr_pt;$descript_en_pt;$descript_fr_grd;$descript_en_grd;$poids;$prixHT;$prixTTC;$prixProHT;$prixProTTC;$data[Lien_famille];$famille;$data[fi_lien_sous_famille];$sfamille\n";
    	}
     
    	header("Content-type: application/vnd.ms-excel");
    	header("Content-disposition: attachment; filename=Fiches-".$famille."-".$sfamille."-". date("Ymd").".csv");
    	print $csv_output;
    	exit;
    Mais voila le texte avec saut de ligne dans les champs "$descript_fr_grd" ou "$descript_en_grd" se place pas dans une seule cellule et tout le fichier csv est totalement en vrac...

    Merci pour votre aide !
    VrroOOOAAAAAPPPPPPPPPP !!!

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu devrais plutot mettre un type csv dans ton header.
    Si ca ne marche pas mieux, regarde ton fichier dans un editeur de texte pour voir s'il est bien formaté.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre actif
    Profil pro
    Developpeur web et Access VBA
    Inscrit en
    Janvier 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur web et Access VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 457
    Points : 203
    Points
    203
    Par défaut
    Merci pour ta réponse !
    Tu devrais plutot mettre un type csv dans ton header.
    Tu fais ça comment ?
    VrroOOOAAAAAPPPPPPPPPP !!!

  4. #4
    Membre actif
    Profil pro
    Developpeur web et Access VBA
    Inscrit en
    Janvier 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur web et Access VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 457
    Points : 203
    Points
    203
    Par défaut
    Je viens de trouver tous mes bugs et tout tourne !!!
    Je vous donne mon code en entier, cela pourrait servir pour quelqu'un d'autre...

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    // on crée la requête SQL 
    	$sql = 'SELECT * FROM Tbl_fiche where fi_lien_sous_famille='.$sf.' order by fi_tri';   
    	// on envoie la requête 
    	$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());  
     
    	// on crée la requête SQL pour les sous-familles
    	$sqls = 'SELECT * FROM Tbl_sous_famille where Id_sous_famille='.$sf; 
    	// on envoie la requête 
    	$reqs = mysql_query($sqls) or die('Erreur SQL !<br>'.$sqls.'<br>'.mysql_error());
    	// On prends tous les champs
    	$datas = mysql_fetch_assoc($reqs); 
    	$sfamille = $datas['sous_famille'];
     
    	// on crée la requête SQL pour les familles
    	$sqlf = 'SELECT * FROM Tbl_famille where Id_famille='.$datas['lien_famille']; 
    	// on envoie la requête 
    	$reqf = mysql_query($sqlf) or die('Erreur SQL !<br>'.$sqlf.'<br>'.mysql_error());
    	// On prends tous les champs
    	$dataf = mysql_fetch_assoc($reqf); 
    	$famille = $dataf['fa_famille'];
     
               // pour faire plus propre j'aurai pu lier les requêtes entre elles...
     
     
    // export données vers xls
                //Premiere ligne = nom des champs (si on en a besoin)
    	$csv_output = " ID;REF;Titre;Titre En;Petite description Fr; Petite description En;Description illimitee Fr;Description illimitee En;Poids;HT;TTC;Pro HT;Pro TTC;ID Famille;Famille;ID Sous-Famille;Sous-Famille";
    	$csv_output .= "\n";
     
    	//Boucle sur les resultats
    	while($data = mysql_fetch_array($req)) {
    	             $fiche = str_replace("\r\n","\n",$data["fi_fiche"]);
    	             $fiche = str_replace("\"","",$fiche);
    		$fiche = str_replace(";",",",$fiche);
     
    		$fiche_en = str_replace("\r\n","\n",$data["fi_fiche_en"]);
    		$fiche_en = str_replace("\"","",$fiche_en);
    		$fiche_en = str_replace(";",",",$fiche_en);
     
    		$descript_fr_pt  = str_replace("\r\n","\n",$data["fi_descript_fr_pt"]);
    		$descript_fr_pt = str_replace("\"","",$descript_fr_pt);
    		$descript_fr_pt = str_replace(";",",",$descript_fr_pt);
     
    		$descript_en_pt = str_replace("\r\n","\n",$data["fi_descript_en_pt"]);
    		$descript_en_pt = str_replace("\"","",$descript_en_pt);
    		$descript_en_pt = str_replace(";",",",$descript_en_pt);
     
    		$descript_fr_grd = str_replace("\r\n","\n",$data["fi_descript_fr_grd"]); 
    		$descript_fr_grd = str_replace("\"","",$descript_fr_grd);
    		$descript_fr_grd = str_replace(";",",",$descript_fr_grd);
     
    		$descript_en_grd = str_replace("\r\n","\n",$data["fi_descript_en_grd"]);
    		$descript_en_grd = str_replace("\"","",$descript_en_grd);
    		$descript_en_grd = str_replace(";",",",$descript_en_grd);
     
    		$poids = str_replace(".",",",$data["fi_poids"]);
    		$prixHT = str_replace(".",",",$data["fi_prix_HT"]);
    		$prixTTC = str_replace(".",",",$data["fi_prix_TTC"]);
    		$prixProHT = str_replace(".",",",$data["PrixProHT"]);
    		$prixProTTC = str_replace(".",",",$data["PrixProTTC"]);
    		$csv_output .="\"$data[Id_fiche]\";\"$data[fi_ref]\";\"$fiche\";\"$fiche_en\";\"$descript_fr_pt\";\"$descript_en_pt\";\"$descript_fr_grd\";\"$descript_en_grd\";\"$poids\";\"$prixHT\";\"$prixTTC\";\"$prixProHT\";\"$prixProTTC\";\"$data[Lien_famille]\";\"$famille\";\"$data[fi_lien_sous_famille]\";\"$sfamille\";";
                	             $csv_output .="\r\n";
    		}
    		header("Content-type: application/vnd.ms-excel");
    		header("Content-disposition: attachment; filename=Fiches-".$famille."-".$sfamille."-". date("Ymd").".csv");
    		print $csv_output;
    		exit;
    		?>
    VrroOOOAAAAAPPPPPPPPPP !!!

  5. #5
    Membre actif
    Profil pro
    Developpeur web et Access VBA
    Inscrit en
    Janvier 2003
    Messages
    457
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur web et Access VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 457
    Points : 203
    Points
    203
    Par défaut
    Je pense que cela peux aider quelques personnes...
    Voici le code pour récupérer (remonter) les données d'un fichier csv et les charger dans la base de donnée MySql

    1/ Un formulaire en PHP avec un champ type="file" permet de rechercher le fichier sur son disque dur et tout est envoyé vers le serveur...

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    //1/ connexion
    // connexion à la base
    require_once('con.php');
    // on sélectionne la base 
    mysql_select_db('maBase',$con) or die('Erreur de selection '.mysql_error());
     
     
    // 2/ Upload du fichier 
    //Pour savoir si le fichier a été uploadé, on vérifie si la taille est bien supérieur à 0
    if (!empty($_FILES['fichier']['size'])){
    //On récupère la taille, le nom et le nom du fichier temporaire
    $f1_size = $_FILES['fichier']['size'];
    $f1_name = $_FILES['fichier']['name'];
    $f1_tmpname = $_FILES['fichier']['tmp_name'];
     
    //Récupération de l'extension du fichier (on prend ce qui suit le dernier point et on le met en minuscule
    $ext = strtolower(substr($f1_name,strrpos($f1_name, ".")+1));
    //Création du tableau des extensions acceptées
    $valides = array("csv","xls");
     
    //On vérifie la taille et le type de fichier
    if ($f1_size > 1000000) $infos .= "- Le fichier est trop volumineux!<br>n";
    if (!in_array($ext,$valides)) $infos .= "- Le type de fichier n'est pas accepté!<br>n";
     
    //Si tout est bon (aucune erreur dans $infos), on déplace le fichier
    if ($infos == ''){
    $nommin = "fic-".date('dmy-His').".".$ext;
    move_uploaded_file($f1_tmpname, "../../importAz/{$nommin}") or $infos .= "- Impossible d'enregistrer le fichier de la petite image, contacter le webmaster!<br>\n";
    }
     
    $fichier = "http://www.monsite.com/import/".$nommin;
    //echo $fichier;
     
    } else {
    $infos .= "Fichier non uploadé<br>\n";
    }
     
    // gestion du message d'erreur si erreur...
    if ($infos !="") {
    echo '<p align="center"><strong>Erreur dans l\'upload de votre fichier :</strong></p>';
    echo '<p align="center">'.$infos.'</p><br>';
    echo '<p align="center"><a href="menu_admin.php"><strong>Retour au menu principal</strong></a></p>';
    exit();
    }
     $cpt = 0; 
     /* On ouvre le fichier à importer en lecture seulement */
     $fp = fopen("$fichier", "r");
     while (!feof($fp)){
     $ligne = "";
      /* Tant qu'on n'atteint pas la fin du fichier on continue */ 
    $ligne = fgets($fp,4096); /* On lit une ligne */  
     
       /* On récupère les champs séparés par des ; dans liste*/
       $liste = explode( ";",$ligne);  
     
       /* On assigne les variables */ 
       // la mise à jour se fait par l'ID !
     
       $Id_fiche = $liste[0]; 
       $fi_ref = str_replace(",",".",$liste[1]); 
       $fi_poids= str_replace(",",".",$liste[3]);
       $fi_prix_HT= str_replace(",",".",$liste[4]);
       $fi_prix_TTC= str_replace(",",".",$liste[5]);
       $PrixProHT= str_replace(",",".",$liste[6]);
       $PrixProTTC= str_replace(",",".",$liste[7]);
     
       // ecriture de la requette de mise à jour
       // 1/ recherche si la fiche existe !
       $nbrfi = 0;
       if($cpt > 0) {
        $sqlr = 'select * from Tbl_fiche where Id='.$Id; 
       // on envoie la requete 
    $reqfi = mysql_query($sqlr) or die('Erreur SQL recherche fiche!<br>'.$sqlr.'<br>'.mysql_error()); 
    $nbrfi = mysql_num_rows($reqfi);
    if ($nbrfi == 1) {
    // Mise à jour car la fiche existe
    //ecriture requete MAJ
       $sqlmaj = "UPDATE Tbl_fiche SET ref='$fi_ref', poids='$poids', prix_HT='$prix_HT', prix_TTC='$prix_TTC', PrixProHT='$PrixProHT', PrixProTTC='$PrixProTTC' WHERE Id='$Id'"; 
    // on insère les informations du formulaire dans la table 
    mysql_query($sqlmaj) or die('Erreur SQL !'.$sqlmaj.'<br>'.mysql_error()); 
    $cpt = $cpt + 1;
    }
    } else {
    $cpt = 1;
    }
    } // fin du while
    fclose($fp); // On ferme le fichier
    //} // fin du if
    VrroOOOAAAAAPPPPPPPPPP !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/01/2012, 14h49
  2. Code JAVA pour import données CSV
    Par tim_m dans le forum Langage
    Réponses: 11
    Dernier message: 16/11/2009, 11h55
  3. Réponses: 2
    Dernier message: 06/12/2007, 15h11
  4. [CSV] Fonction PHP pour SQL Server
    Par wolflinger dans le forum Langage
    Réponses: 2
    Dernier message: 17/05/2006, 12h57
  5. [Librairies] générer un .csv en php pour excel
    Par allowen dans le forum Langage
    Réponses: 3
    Dernier message: 14/12/2005, 16h40

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