Page 1 sur 2

MySQL vers CSV

Posté : 28 mai 2013, 10:37
par Iutien
Bonjour à tous,

Je bute dans mon code pour exporter des données de ma vue SQL vers un CSV...
<?php

require_once "MaBD.php";

$bd = MaBD::getInstance(); // $bd est un objet PDO

// récupération des données dans des variables grace à la méthode POST
$dateExportation = $_POST['dateExportation'];

//Variable
$separator=";";

//Extraire le nom des colonnes
$rsColumn = mysql_query("SHOW COLUMNS FROM VUE_RC");
$columnLine="";
$columnCount=0;
if ($rsColumn) {
    if (mysql_num_rows($rsColumn) > 0) {
        while ($row = mysql_fetch_assoc($rsColumn)) {
            $columnLine .= $row['Field'].$separator;
            $columnCount++;
        }
        $columnLine .="\n";
    }
}

//Extraire les données
$rsData=mysql_query("SELECT * FROM VUE_RC");
$dataLine="";
while ($row = mysql_fetch_array($rsData)) {
    for ($i = 0; $i < $columnCount; $i++) {
        $dataLine.=$row[$i].$separator;
    }
    $dataLine.="\n";
}

//Envoyer le contenu au navigateur internet
header("Content-type: text/x-csv");
header("Content-Disposition: attachment; filename=exportRC.csv");
echo $columnLine.$dataLine;
exit;
?>
En executant ce code, j'ai bien mon fichier CSV mais rien dedans.. Même pas le nom des colonnes.

Merci d'avance.

Iutien

Re: MySQL vers CSV

Posté : 28 mai 2013, 11:41
par ghost5922
Bonjour,

mets en commentaire deja les lignes

header("Content-type: text/x-csv");
header("Content-Disposition: attachment; filename=exportRC.csv");

pour voir si tu as une erreur php ou mysql ou si tu affiches bien toute les donnees

Re: MySQL vers CSV

Posté : 28 mai 2013, 12:03
par Iutien
<?php
require_once "MaBD.php";

$bd = MaBD::getInstance(); // $bd est un objet PDO


// filename for export
$csv_filename = 'exportRC.csv';
 
 
// create empty variable to be filled with export data
$csv_export = '';
 
// query to get data from database
$query = mysql_query("SELECT * FROM VUE_RC");
$field = mysql_num_fields($query);
 
// create line with field names
for($i = 0; $i < $field; $i++) {
  $csv_export.= mysql_field_name($query,$i).';';
}
// newline (seems to work both on Linux & Windows servers)
$csv_export.= '
';
 
// loop through database query and fill export variable
while($row = mysql_fetch_array($query)) {
  // create line with field values
  for($i = 0; $i < $field; $i++) {
    $csv_export.= '"'.$row[mysql_field_name($query,$i)].'";';
  }	
  $csv_export.= '
';	
}
 
// Export the data and prompt a csv file for download
header("Content-type: text/x-csv");
header("Content-Disposition: attachment; filename=".$csv_filename."");
echo($csv_export);
?>
J'ai essayé d'alléger le code. Oui c'est bien une erreur PHP

Re: MySQL vers CSV

Posté : 28 mai 2013, 12:33
par ghost5922
OK quel et l'erreur affiches ? tu récupère bien tes résultats il faut un peu plus d'information :)

Re: MySQL vers CSV

Posté : 28 mai 2013, 13:26
par Iutien
En fait comment t'expliquer, quand j’exécute le code, cela fonctionne : ça génère le fichier CSV.

Je l'ouvre et là....rien c'est vide :twisted:

Re: MySQL vers CSV

Posté : 28 mai 2013, 13:55
par ghost5922
Normal que ca marche du lui demande de te generer un fichier CSV donc mets en commentaire

header("Content-type: text/x-csv");
header("Content-Disposition: attachment; filename=exportRC.csv");

puis affiche ton code cela va affiche ton code sans généré de fichier

Re: MySQL vers CSV

Posté : 28 mai 2013, 14:21
par Iutien
Ca me fait une page blanche...

Ya meme pas d'erreur affichée... J'ai "display_errors" dans php.ini qu'est à ON. Et j'ai "error_reporting(E_ALL);" dans mon script.

Aucune erreur affichée, seulement une page blanche

Re: MySQL vers CSV

Posté : 28 mai 2013, 14:37
par ghost5922
Ok affiches les erreurs mysql et vérifie tes boucles

Re: MySQL vers CSV

Posté : 28 mai 2013, 14:41
par Iutien
<?php
error_reporting(E_ALL);
require_once "MaBD.php";

$bd = MaBD::getInstance(); // $bd est un objet PDO


// nom du fichier
$csv_filename = 'exportRC.csv';
 
 
// variable d'export a remplir
$csv_export = '';
 
// requete SQL
$query = mysql_query("SELECT * FROM RAPPORTEUR");
$field = mysql_num_fields($query);
 
// creation des lignes
for($i = 0; $i < $field; $i++) {
  $csv_export.= mysql_field_name($query,$i).';';
}
// newline
$csv_export.= '
';
 
// boucle sur la requete et remplissage
while($row = mysql_fetch_array($query)) {
  // creation des lignes (remplissage)
  for($i = 0; $i < $field; $i++) {
    $csv_export.= '"'.$row[mysql_field_name($query,$i)].'";';
  }	
  $csv_export.= '
';	
}
 
// export
header("Content-type: text/x-csv");
header("Content-Disposition: attachment; filename=".$csv_filename."");
echo($csv_export);
?>
C'est censé marcher ce bordel... j'ai 2 boucles... je les ai vérifié 36 fois... :shock:

Re: MySQL vers CSV

Posté : 28 mai 2013, 14:50
par ghost5922
Tu as 3 boucles sinon si ton code marche le echo $csv_export devrai s'affiche

Re: MySQL vers CSV

Posté : 28 mai 2013, 14:53
par Iutien
Il ne s'affiche pas malheureusement...

Re: MySQL vers CSV

Posté : 28 mai 2013, 15:06
par Iutien
Si quelqu'un a un script qui marche, je suis preneur...

J'en suis pas loin de la solution mais je ne trouve pas ou est l'erreur...

Merci

Re: MySQL vers CSV

Posté : 28 mai 2013, 15:08
par ghost5922
test bout a bout ton code
<?php
error_reporting(E_ALL);
require_once "MaBD.php";

$bd = MaBD::getInstance(); // $bd est un objet PDO


// nom du fichier
$csv_filename = 'exportRC.csv';
 
 
// variable d'export a remplir
$csv_export = '';
 
// requete SQL
$query = mysql_query("SELECT * FROM RAPPORTEUR");
$field = mysql_num_fields($query);
 
// creation des lignes
for($i = 0; $i < $field; $i++) {
  $csv_export.= mysql_field_name($query,$i).';';
}
// newline
$csv_export.= '
';
/* 
// boucle sur la requete et remplissage
while($row = mysql_fetch_array($query)) {
  // creation des lignes (remplissage)
  for($i = 0; $i < $field; $i++) {
    $csv_export.= '"'.$row[mysql_field_name($query,$i)].'";';
  }     
  $csv_export.= '
';      
}*/
 
// export
//header("Content-type: text/x-csv");
//header("Content-Disposition: attachment; filename=".$csv_filename."");
echo($csv_export);
?>

Re: MySQL vers CSV

Posté : 28 mai 2013, 15:13
par Iutien
Même en testant bout en bout, j'ai quoi qu'il arrive, la page blanche...

Re: MySQL vers CSV

Posté : 28 mai 2013, 15:48
par lalmat
Ca, ca devrais t'aider...
$query = mysql_query("SELECT * FROM RAPPORTEUR");
if (!$query) {
  echo mysql_error();
}
else {
  $field = mysql_num_fields($query);
}
IMHO "mysql_num_felds($query) retourne 0 ou -1 donc tu ne passe pas dans ta boucle. Par conséquent tu dois avoir un souchis dans ta requête mais comme je ne connais pas la table ni la base... D'ailleurs je trouve que ta connexion à la base est bizarre... Utilisation d'un objet puis utilisation de mysql_...

Pour un retour chariot, tu devrais utiliser PHP_EOL (ca gère le retour chariot en fonction de l'OS serveur) :
$csv_export .= PHP_EOL;