Buongiorno, sono un neofita autodidatta di php ed ho l'esigenza di far scaricare, agli utenti di un'applicazione web, un file .txt contenente le righe di una tabella di un db Mysql.
Per raggiungere lo scopo volevo modificare uno script che utilizzo per fare il dump della stessa tabella, ma ho incontrato non poche difficoltà.
Script del Dump
<?php
require('Connections/logicat.php');
# Creo la funzione datadump
function datadump ($table) {
# Creo la variabile $result
@$result .= "# Dump of $table \n";
@$result .= "# Dump DATE : " . date("d-M-Y") ."\n\n";
# Conto i campi presenti nella tabella
$query = mysql_query("SELECT * FROM $table");
$num_fields = @mysql_num_fields($query);
# Conto il numero di righe presenti nella tabella
$numrow = mysql_num_rows($query);
# Passo con un ciclo for tutte le righe della tabella
for ($i =0; $i<$numrow; $i++)
{
$row = mysql_fetch_row($query);
# Ricreo la tipica sintassi di un comune Dump
$result .= "INSERT INTO ".$table." VALUES(";
# Con un secondo ciclo for stampo i valori di tutti i campi
# trovati in ogni riga
for($j=0; $j<$num_fields; $j++) {
$row[$j] = addslashes($row[$j]);
$row[$j] = ereg_replace("\n","\\n",$row[$j]);
if (isset($row[$j])) $result .= "\"$row[$j]\"" ; else $result .= "\"\"";
if ($j<($num_fields-1)) $result .= ",";
}
# Chiudo l'istruzione INSERT
$result .= ");\n";
}
return $result . "\n\n\n";
}
$data = date("d-m-Y");
$table1 = datadump("FC_Righe");
//$table2 = datadump("clienti");
# Diamo un nome al file di Dump che verrà creato
$file_name = "fc_righe_". $data . ".txt";
# Definiamo le intestazioni
//Header("Content-type: application/octet-stream");
//Header("Content-Disposition: attachment; filename = $file_name");
# Stampiamo il contenuto
echo $table1;
# Chiudiamo
exit;
?>
Qualcuno mi potrebbe dire perchè non sfruttare lo script del dump così come è.
Il problema è che questo script stampa le righe un campo alla volta tramite la variabile $row[sj] ed io ho l'esigenza di incolonnare i campi in funzione della lunghezza dei singoli campi; in pratica se il campo "data" è 10 caratteri, nella riga deve occupare 10 caratteri + 2caratteri e così via.
Per far ciò ho tentato di modificare lo script come segue
<?php
require('Connections/logicat.php');
# Creo la funzione creatxt
function creatxt($table) {
$data = date("d-m-Y");
//$dataUSA = date("Y-m-d", strtotime($data));
$dataUSA = "2008-05-23";
# Creo la variabile $result
@$result .= "Stampa movimenti foglio cassa del";
@$result .= ":" . date("d-m-Y") . "\n\n";
@$result .= "Data Gruppo Sottogruppo Risorsa Importo RT Descrizione Documento Contabilizza" . "\n\n";
mysql_select_db($database_logicat, $logicat);
$query_Recordset1 = "SELECT FcData, FC_Gruppi.Descrizione_Gruppo, FC_Sottogruppi.Descrizione_SottoGruppo, FC_Risorse.Risorsa, Importo, RT, Descrizione, Documento, Contabilizza FROM FC_Righe INNER JOIN FC_Gruppi ON FC_Righe.id_Gruppo = FC_Gruppi.id_Gruppo INNER JOIN FC_Sottogruppi ON FC_Righe.Id_Sottogruppo = FC_Sottogruppi.Id_Sottogruppo INNER JOIN FC_Risorse ON FC_Righe.Id_Risorsa = FC_Risorse.Id_risorsa WHERE FcData = '$dataUSA' ORDER BY FC_Righe.id_Gruppo ASC";
$Recordset1 = mysql_query($query_Recordset1, $logicat) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
do{
$result .= $row_Recordset1['FcData'] . $row_Recordset1['Descrizione_Gruppo'] . $row_Recordset1['Descrizione_SottoGruppo'] . $row_Recordset1['Risorsa'] . $row_Recordset1['Importo'] . $row_Recordset1['RT'] . $row_Recordset1['Descrizione'] . $row_Recordset1['Documento'] . $row_Recordset1['Contabilizza'] . "\n";
}while ($row_Recordset1 = mysql_fetch_assoc($Recordset1));
}
return $result . "\n\n\n";
$data = date("d-m-Y");
$table1 = creatxt("FC_Righe");
# assegno il nome al file di testo che verrà creato
$file_name = "fc_righe_". $data . ".txt";
# Definisco le intestazioni
Header("Content-type: application/octet-stream");
Header("Content-Disposition: attachment; filename = $file_name");
# Stamp0 il contenuto
echo $table1;
# Chiudo
exit;
?>
ma lo stesso mi restituisce un errore (Notice: Undefined variable: result in C:\Program Files\EasyPHP 2.0b1\www\fogliocassa\mytext.php on line 25)
Qualcuno potrebbe Aiutarmi?