Allora.....
come prima cosa è sbagliato l'header importante: quello che ti fa apparire il prompt che ti manca.
Codice PHP:
// questo è l'header importante
header("Content-Disposition: attachment; filename=\"nomefile.csv\" ");
// io aggiungerei anche questi
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: public");
Con questo dovresti risolvere il tuo primo problema.
Per il secondo, beh..... se scrivi print($variabile), tu stamperai sempre a video quello che è contenuto in una variabile.
Per scrivere in un file devi fare così:
Codice PHP:
$file = "nomefile.csv";
$apri_il_file_da_scrivere = fopen($file, "w");
$scrivici_dentro = fwrite($apri_il_file_da_scrivere, $righe);
$chiudi_ed_invia = fclose($apri_il_file_da_scrivere);
.
Avrai notato i nomi strambi delle variabili: era per evitare di mettermi a scrivere dei commenti.
Ora un paio di segnalazioni.
1) Nel tuo script hai scritto:
header("Content-disposition: nomefile.cvs");
Se intendi creare al volo un file COMMA SEPARATED VALUES, l'estensione è CSV.
2) Ma perché un DO/WHILE? Non ti era più comodo un semplice ciclo WHILE?
Codice PHP:
while ($row_tabella= mysql_fetch_assoc($tabella)) {
$righe.= "\"".$row_tabella['data_t1']."\"\t\"".$row_tabella['msisdn']."\"\t\"".$row_tabella['marcaggio']."\"\n";
}
Infine, l'errore che ti viene segnalato è classico di quando stampi a video prima di lanciare un header.
Suppongo che l'header che lancia il prompt di download venisse lanciato proprio dopo che tu a video stampavi il contenuto della tabella, quindi con le correzioni che ti ho segnalato non dovresti più avere problemi.
Ad ogni modo, ho scritto il codice al volo e potrebbe esserci qualche refuso.