PDA

Visualizza la versione completa : creare un CSV al volo


darkiko
17-10-2005, 18:32
signori buonasera :D

mentre cercavo di imparare a scrivere su un db access con php, mi sono imbattuto di striscio nei file CSV che non conoscevo...
e ora, visto che potrebbero tornarmi utili, mi è venuta la curiosità di capire...

ad esempio da phpmyadmin esportare il contenuto di una tabella di un db mysql in un csv è una vaccata, ok, ma si potrebbe anche fare direttamente via php?
uno script che crea il csv e ti chiede di salvarlo...

leggendo un po' di qua e un po' di la' mi pare di aver capito che qualcosa si può fare, ma onestamente non ho capito come :stordita:


grazie per ogni info e scusatemi se ho scritto qualche stupidata (:

darkiko
18-10-2005, 09:58
:stordita:

margherite
18-10-2005, 10:43
Un file csv é un file di testo con i campi separati da ; e le righe da a capo.
Quindi basta leggere da DB e scrivere i campi con una fprintf, fput etc.



$fp = fopen("file.txt","w");

for (... ciclo ...)
fwrite($fp, "$campo1;$campo2;$campo3\n");
fclose($fp);

darkiko
18-10-2005, 11:39
oki,
detto così non sembra difficile

faccio un po' di prove e vediamo cosa combino :zizi:


grazie (:

darkiko
18-10-2005, 14:58
funziona :zizi:

dunque, io ho fatto così:
ho creato una tabella prova con 3 campi, "nome" "cognome" e "sesso" e un file vuoto chiamato prova.csv.



$query = 'SELECT nome, cognome, sesso FROM prova';
$ris = mysql_query($query,$conn) or die("Errore nella query: " . mysql_error());
$fp = fopen("prova.csv","w");
while($riga = mysql_fetch_array($ris)) {
$testo = "$riga[nome];";
$testo .= "$riga[cognome];";
$testo .= "$riga[sesso];";
fwrite($fp, $testo."\n");
}
fclose($fp);

e se vado a prendermi il file prova.csv leggo
PIPPO;PIPPO;M;
PLUTO;PLUTO;M;

:zizi:

tra l'altro, ora (correggetemi se sbaglio) se io il file al posto che chiamarlo prova.csv lo chiamo prova.csvv, lo posso scaricare al posto che vederlo con il browser (come succede invece se il file è .csv) e dopo averlo rinominato posso farci quello che voglio con Access o Excel, giusto?

margherite
18-10-2005, 15:10
Si

darkiko
18-10-2005, 15:23
Originariamente inviato da margherite
Si
danke :D

darkiko
18-10-2005, 16:19
problema...

pensavo bastasse rinominare il mio .csv in .csvpippo per non vederlo nel browser e scaricarlo...
ma non è così :zizi:


come caspita faccio a farlo scaricare? :stordita:

dinucciarturo
18-10-2005, 16:38
Originariamente inviato da darkiko
problema...

pensavo bastasse rinominare il mio .csv in .csvpippo per non vederlo nel browser e scaricarlo...
ma non è così :zizi:


come caspita faccio a farlo scaricare? :stordita:


ma...puoi anche crearti un link e poi: Salva con nome ...mi sembra la cosa più semplice! :fagiano:


:ciauz:

badaze
18-10-2005, 17:19
Puoi anche fare in modo che funzioni per tutte le tabelle



<?
ob_start();
$link = mysql_connect("", "root", "") or die ("Impossible de se connecter => ".mysql_error());
mysql_select_db ("test") or die ("Impossible de se connecter => ".mysql_error());

$tabella = "catalogo_categorie";

$res = mysql_list_fields("test",$tabella);
$nbCampi = mysql_num_fields($res);

$arrayNomi = array();
for ($i=0;$i<$nbCampi;$i++) {
$name = mysql_field_name($res,$i);
$arrayNomi[] = "$name";
}
$clausolaSelect = "select CONCAT_WS(';',". implode(",",$arrayNomi).") ";
$clausolaSelect .= " as A from $tabella order by A";
$res = mysql_query( $clausolaSelect) or die(mysql_error());
while (list($result) = mysql_fetch_array($res)) {
print "$result\n";
}
$contents = ob_get_contents();
ob_end_clean();
header("Content-Type: application/text");
header("Content-Disposition: attachment; filename=$tabella.csv");
print $contents
?>

Loading