Esportare tabella in csv con intestazione di colonne

Max61

Utente Attivo
2 Mar 2014
694
3
18
Salve, sto cercando esportare i dati di una query in un file csv, con il codice che allego i dati sono visualizzati correttamente, mancano però le intestazioni delle colonne
PHP:
$query = mysql_query("SELECT tblcheckresidenti.intervento,
           tblcheckresidenti.vecchio_civico,
           tblcheckresidenti.residente,
           tblcheckattivita.attivita,
           tblcheckaccesso.cod_topo_rilievo,
           tblcheckaccesso.indirizzo_rilievo,
           tblcheckaccesso.civico_rilievo,
           tblcheckaccesso.esponente_rilievo,
           tblcheckaccesso.targhetta_si_no,
           tblcheckaccesso.sit,
           tblcheckaccesso.toponomastica,
           tblcheckaccesso.tari,
           tblcheckaccesso.pratica_assegnazione,
           tblcheckaccesso.vecchio_cod_topo,
           tblcheckaccesso.vecchio_indirizzo,
           tblcheckaccesso.vecchio_civico,
           tblcheckaccesso.vecchio_esponente,
           tblcheckaccesso.progressivo_snc,
           tblcheckaccesso.cod_topo_ass,
           tblcheckaccesso.toponimo_ass,
           tblcheckaccesso.civico_ass,
           tblcheckaccesso.esponente_ass,
           tblcheckaccesso.cessato
FROM tblcheckresidenti
INNER JOIN tblcheckattivita
ON (tblcheckattivita.vecchio_civico = tblcheckresidenti.vecchio_civico)
INNER JOIN tblcheckaccesso
ON (tblcheckaccesso.vecchio_civico = tblcheckresidenti.vecchio_civico)");

$data = "";
while($row = mysql_fetch_array($query)) {
  $data .= $row['campo1'].";".$row['campo2'].";".$row['campo3'].";".$row['campo4'].";".$row['campo5'].";".$row['campo6'].";".$row['campo7'].";".$row['campo8']."\n";
}

header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename="Check completo.csv"');
echo $data; exit();
Qualcuno sa darmi un aiuto?
Grazie
Max61
 

macus_adi

Utente Attivo
5 Dic 2017
1.313
88
48
IT/SW
Una prima versione potrebbe essere questa:
PHP:
$intest='';
$data='';
while($row = mysql_fetch_assoc($query)) {
  if($intest==''){
       $intest=join(';',array_keys($row))."\r\n";
   $data.=$intest;
}
$data.=join(',',$row)."\r\n";
}
Una seconda versione tipo questa:
PHP:
$result = mysqli_query($con, $query);
$data= mysqli_fetch_all($result, MYSQLI_ASSOC);
$csv[]=array_keys($data[0]);
array_map(function($el) use (&$csv){return array_values($el)},$data);
echo join("\r\n",$csv);
Buttata giù così, dovrebbe andare!
 

Max61

Utente Attivo
2 Mar 2014
694
3
18
Una prima versione potrebbe essere questa:
PHP:
$intest='';
$data='';
while($row = mysql_fetch_assoc($query)) {
  if($intest==''){
       $intest=join(';',array_keys($row))."\r\n";
   $data.=$intest;
}
$data.=join(',',$row)."\r\n";
}
Una seconda versione tipo questa:
PHP:
$result = mysqli_query($con, $query);
$data= mysqli_fetch_all($result, MYSQLI_ASSOC);
$csv[]=array_keys($data[0]);
array_map(function($el) use (&$csv){return array_values($el)},$data);
echo join("\r\n",$csv);
Buttata giù così, dovrebbe andare!
Una prima versione potrebbe essere questa:
PHP:
$intest='';
$data='';
while($row = mysql_fetch_assoc($query)) {
  if($intest==''){
       $intest=join(';',array_keys($row))."\r\n";
   $data.=$intest;
}
$data.=join(',',$row)."\r\n";
}
Una seconda versione tipo questa:
PHP:
$result = mysqli_query($con, $query);
$data= mysqli_fetch_all($result, MYSQLI_ASSOC);
$csv[]=array_keys($data[0]);
array_map(function($el) use (&$csv){return array_values($el)},$data);
echo join("\r\n",$csv);
Buttata giù così, dovrebbe andare!
Ciao e grazie, ho provato il tuo codice e in effetti mi mette i nomi delle colonne del db, però i dati non sono più incolonnati
PHP:
$intest='';
$data='';
while($row = mysql_fetch_assoc($query)) {
  if($intest==''){
       $intest=join(';',array_keys($row))."\r\n";
   $data.=$intest;
} 
$data.=join(',',$row)."\r\n";
}
while($row = mysql_fetch_array($query)) {
  $data .= $row['campo1'].";".$row['campo2'].";".$row['campo3']."\n";
}

header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename="Check completo.csv"');
echo $data; exit();
ovviamente ho sbagliato ad inserire il tuo codice.
Un altra cosa, ma i nomi delle colonne li posso dare io invece di prendere i nomi dei campi del db?
Grazie e scusa per l'imbranataggine
 

macus_adi

Utente Attivo
5 Dic 2017
1.313
88
48
IT/SW
Un altra cosa, ma i nomi delle colonne li posso dare io invece di prendere i nomi dei campi del db?
Certo, devi mappare le colonne in un dizionario (array associativo)...

però i dati non sono più incolonnati
Ho utilizzato come separatore la "," virgola, quindi devi adattarlo a ciò che ti serve....

Per dati con "virgole" utilizza il PIPE "|" o il TILDE "~" alt+126!

UP:
$intest=join(';',array_keys($row))."\r\n";
$data .= $row['campo1'].";".$row['campo2'].";".$row['campo3']."\n";
Volutamente fatto così "\r\n" e "\n"???
 

Max61

Utente Attivo
2 Mar 2014
694
3
18
Certo, devi mappare le colonne in un dizionario (array associativo)...


Ho utilizzato come separatore la "," virgola, quindi devi adattarlo a ciò che ti serve....

Per dati con "virgole" utilizza il PIPE "|" o il TILDE "~" alt+126!
Perfetto, grazie non mi ero accorto della virgola.
Ma scusa se ne approfitto, posso intestare i nomi delle colonne a mio piacimento?
 

macus_adi

Utente Attivo
5 Dic 2017
1.313
88
48
IT/SW
Ma scusa se ne approfitto, posso intestare i nomi delle colonne a mio piacimento?
Certo, devi mappare le colonne in un dizionario (array associativo)...
In alternativa usa nella query
Codice:
SELECT tblcheckresidenti.intervento as Intervento,
           tblcheckresidenti.vecchio_civico as OldNumeroCivico,
           tblcheckresidenti.residente as Residenza,.......
etc...