[RESOLU] MySQL vers CSV

Eléphanteau du PHP | 39 Messages

28 mai 2013, 10:37

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

Mammouth du PHP | 619 Messages

28 mai 2013, 11:41

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

Eléphanteau du PHP | 39 Messages

28 mai 2013, 12:03

<?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

Mammouth du PHP | 619 Messages

28 mai 2013, 12:33

OK quel et l'erreur affiches ? tu récupère bien tes résultats il faut un peu plus d'information :)

Eléphanteau du PHP | 39 Messages

28 mai 2013, 13:26

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:

Mammouth du PHP | 619 Messages

28 mai 2013, 13:55

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

Eléphanteau du PHP | 39 Messages

28 mai 2013, 14:21

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

Mammouth du PHP | 619 Messages

28 mai 2013, 14:37

Ok affiches les erreurs mysql et vérifie tes boucles

Eléphanteau du PHP | 39 Messages

28 mai 2013, 14:41

<?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:

Mammouth du PHP | 619 Messages

28 mai 2013, 14:50

Tu as 3 boucles sinon si ton code marche le echo $csv_export devrai s'affiche

Eléphanteau du PHP | 39 Messages

28 mai 2013, 14:53

Il ne s'affiche pas malheureusement...

Eléphanteau du PHP | 39 Messages

28 mai 2013, 15:06

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

Mammouth du PHP | 619 Messages

28 mai 2013, 15:08

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);
?>

Eléphanteau du PHP | 39 Messages

28 mai 2013, 15:13

Même en testant bout en bout, j'ai quoi qu'il arrive, la page blanche...

Eléphanteau du PHP | 13 Messages

28 mai 2013, 15:48

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;