[RESOLU] MySQL vers CSV

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] MySQL vers CSV

Re: [RESOLU] MySQL vers CSV

par moogli » 28 mai 2013, 17:09

on peux faire beaucoup plus simple avec des fonctions simple comme implode
<?php
$query = mysql_query('select * from rapporteur');

$first = true;
$csv_export = '';

while ($data = mysql_fetch_assoc($query)){
    // gestion de l'entête des colonnes
    if($first === true){
        $cvs_export .= implode(';',array_keys($data));
        $csv_export .= PHP_EOL;
        $first = false;
    }
    
    $csv_export .= impode (';',$data);
    $csv_export .= PHP_EOL;
}
//etc

Pour info l'extension mysql est déprécié il est préférable de lui préférer l'extension mysqli ou PDO.


@+

Re: [RESOLU] MySQL vers CSV

par Iutien » 28 mai 2013, 15:49

Le code marche je confirme. En effet cela venait de ma connexion à la base. Sinon mes boucles marchent !

Merci de votre aide.

Iutien

Re: MySQL vers CSV

par lalmat » 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;

Re: MySQL vers CSV

par Iutien » 28 mai 2013, 15:13

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

Re: MySQL vers CSV

par ghost5922 » 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);
?>

Re: MySQL vers CSV

par Iutien » 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

Re: MySQL vers CSV

par Iutien » 28 mai 2013, 14:53

Il ne s'affiche pas malheureusement...

Re: MySQL vers CSV

par ghost5922 » 28 mai 2013, 14:50

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

Re: MySQL vers CSV

par Iutien » 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:

Re: MySQL vers CSV

par ghost5922 » 28 mai 2013, 14:37

Ok affiches les erreurs mysql et vérifie tes boucles

Re: MySQL vers CSV

par Iutien » 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

Re: MySQL vers CSV

par ghost5922 » 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

Re: MySQL vers CSV

par Iutien » 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:

Re: MySQL vers CSV

par ghost5922 » 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 :)

Re: MySQL vers CSV

par Iutien » 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