Download in .csv

  • Creatore Discussione Creatore Discussione iuta74
  • Data di inizio Data di inizio

iuta74

Nuovo Utente
29 Apr 2014
24
0
0
Ciao a tutti,

ho creato una maschera web con php, che permette all'amministratore dell'applicazione di scegliere la data dell'ordine da scaricare. Il codice della pagina (copiato brutalmente dal web) che dovrebbe permettere il download è quella di cui sotto. Purtroppo stampa a video il file senza scaricarlo. Mi piacerebbe infine che il programma chiedesse all'utente DOVE salvare il file di cui si sta facendo il download, senza scaricarlo in una cartella predefinita. E' possibile? Grazie

PHP:
$datainserimento = $_POST['datainserimento'];

$host = "localhost"; // <-- inserisci qui l'indirizo ip di MySql 
$user =  "root"; // <-- nome utente del database 
$pass =  "root"; // <-- password dell'utente 
$db = "MM"; // il database desiderato 
$table = "ordini"; // la tabella da esportare in .csv 
$file = $table; // il nome del file csv da generare 
$link = mysql_connect($host, $user, $pass) or die("Can not connect." . mysql_error()); /* usa i dati forniti per connetterti a MySql, se impossibile interrompi */ 

mysql_select_db($db) or die("Can not connect."); // seleziona il db desiderato oppure interrompi
$csv_output=""; 

$result = mysql_query("SHOW COLUMNS FROM ".$table.""); 
$i = 0; 

if (mysql_num_rows($result) > 0) { 
  while ($row = mysql_fetch_assoc($result)) {   
	 $csv_output .= $row['Field']."; "; 
	 $i++; 
  } 
} 

$csv_output .= "\n";  

$values = mysql_query("SELECT * FROM ".$table." WHERE datainserimento='".$datainserimento."'"); 
while ($rowr = mysql_fetch_row($values)) { 
	for ($j=0;$j<$i;$j++) {  
	$csv_output .= $rowr[$j]."; "; 
	} 
	$csv_output .= "\n";  
} 

$filename = $file."_".date("d-m-Y_H-i",time()); // il nome del file sara' composto da quello scelto all'inizio e la data ed ora oggi

/*$archivia = new ZipArchive();         
$nome_file="archiviodb.zip";             
if ($archivia->open($nome_file, ZIPARCHIVE::CREATE)!==TRUE) { 
	@exit("Impossibile aprire <$nome_file>\n"); 
} 

$archivia->addFile("$filename.csv");*/          

header("Cache-Control: public"); 
header("Content-Description: File Transfer"); 
header( "Content-disposition: attachment;filename=".$filename.".csv"); 
header("Content-type: application/ms-excel"); 
header("Content-Transfer-Encoding: binary"); 

//header("Content-disposition: csv" . date("Y-m-d") . ".csv"); 

print $csv_output; // il file e' pronto e puo' essere scaricato 
exit;
 
Ciao, ti consiglio di abbandonare l'estensione mysql che è già deprecata e verrà poi rimossa
prova questo
PHP:
<?php
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: inline; filename=dati.xls");

$sql = new mysqli("localhost", "root", "password", "database");
$query = "SELECT * FROM tabella";
$result = $sql->query($query);
?>
<table>
    <tr>
        <th>Campo 1</th>
        <th>Campo 2</th>
    </tr>
    <?php
    while ($row = $result->fetch_assoc()) {
        echo "<tr>";
        echo "<td>" . $row['campo_uno'] . "</td>";
        echo "<td>" . $row['campo_due'] . "</td>";
        echo "</tr>";
    }
    ?>
</table>
 
Grazie criric,

il tuo codice mi formatta perfettamente (e con molte meno righe di codice) il risultato sperato, tuttavia me lo mostra a video e non mi fa il download del file. Non solo, come dicevo prima, mi piacerebbe che all'utente venisse anche chiesto DOVE salvare il file.
Grazie
 
Che browser utilizzi ? perchè a me lo scarica e mi chiede anche dove, sono comunque impostazioni del browser, io in firefox posso indicare la cartella del download senza che mi chieda tutte le volte dove salvarlo.
 

Discussioni simili