scrivere su file...

allora ho due grossi problemi per ciò che rguarda la scrittura su file, magari potete aiutarmi:

1)Devo inserire in un unico file.txt un'intestazione e una serire di righe contenenti dati estratti dal db tramite un ciclo WHILE

2) c'è un modo per formattare il testo (in prartica stabilire a priori il layout, a mò di tabelle)

 il codice abbastanza sporco per ora:

<?
$dati = mysql_query("SELECT * FROM tabella");
WHILE($row = mysql_fetch_array($dati)){

$STRINGA="$row[dato1] $row[dato2]"; //queste sono le righe 
}

$STRINGA2="$row[intestazione]""; questa non deve essere ripetuta, ma scritta solo 1 volta


e poi dovrei scrverlo:

$scrivi_file=fopen("documento.txt","w");
fwrite($scrivi_file,$STRINGA$STRINGA2);
fclose($scrivi_file);
?>
inviato 9 anni fa
yusizu
modificato 9 anni fa
X 0 X

allora alla prima domanda mi rispodo da solo, posto il codice, okkio che c'è anche la funzione che stampa il documento:

$dati1 = mysql_query("SELECT * FROM tabella'");
$row1 = mysql_fetch_array($dati1);

$STR1 ="INTESTAZIONE";        //ovviamente verrà scritta (e in questo caso stampata)una volta sola

$PRN = 'nome_della_stampante;
$copie =1;
  $CMDLINE="lpr -P $PRN -#$copie";            //per la stampa
  $pipe=popen("$CMDLINE" , 'w');                 //per la stampa
fwrite($pipe,$STR1);                                       //per la stampa
 $scrivi_file1=fopen("FILE.txt",'w+');             //per la scrittura del file
fwrite($scrivi_file1,$STR1);                          //per la scrittura del file

$dati2 = mysql_query("SELECT * FROM tabella '");
WHILE($row = mysql_fetch_array($dati2)){

$STR =" $row[primo_record] $row[secondo_record]   "; //qua vengono stampati tutti i record (quanti effettivamente sono)
fputs($scrivi_file1,$STR);
fclose($scrivi_file2);
fputs($pipe,$STR);
}
pclose($pipe);
 lpr()

ora il mio grosso problema è nell'ordinare i record estratti dal db e inserite nel ciclo WHILE,

esattamente dovrebbero venir fuori come incolonnati, mentre al momento ho una roba del genere;

record1 record2

record1_con_frase più lunga   record2

...quindi mi sballa tutto il layout come posso dire di scrivermi es record 1 in una determinata posizione al di là della sua lunghezza, insomma come se usassi le tabelle...ma qua non si usano! :tichedoff:

spero di essere stato chiaro e che possiate aiutarmi;

P.S il codice magari sarà sporchissimo ma funziona, per cui copiatene tutti

 :bye:

risposto 9 anni fa
yusizu
X 0 X

usa i div o span impostati come se fossero 2 colonne con un css.

Ora è tardi, se non risolvi domani spiego meglio.

risposto 9 anni fa
LonelyWolf
X 0 X

pls help...ancora non ho risolto...

non so come impostare i div o meglio non so come inserirli nella stringa, perchè non riconsce i tag html,

difatti se scrivo:

$STR="<table width=100%><tr><td>$row[primorecord]...</td></tr></table>";

come output avrò:

<table width=100%><tr><td>primorecord...</td></tr></table>

...l'unica cosa che riconosce e \n ma non mi serve in questo caso...

grazie mille :bye:

risposto 9 anni fa
yusizu
X 0 X

Se si tratta di un semplice file di testo allora non devi usare i tag html. La soluzione al tuo problema è piuttosto laboriosa.

Supponiamo di dover creare questa "tabella"

[tt]nome    cognome  città

Gigi    Alemanno Roma

Camillo Quaranta Milano

Alfredo Rossi    Torino[/tt]

Come puoi vedere ogni colonna ha le dimensioni della parola più lunga in esa contenuta, più uno spazio che la separa dalla colonna alla sua destra. Quindi per prima cosa è necessario, durante la fetch dei risultati della query, salvare tutti i record in un array e contare di volta in volta la lunghezza delle parole. Alla fine della fetch avrai memorizzato la lunghezza delle parole più lunghe contenute in ciascuna colonna.

Con queste informazioni puoi creare la tabella. Per farlo devi aggiungere tanti spazi alla destra di ciascuna parola, quanti te ne servono per farla diventare lunga come la parola più lunga della colonna. Per ottere questo risultato devi usare la funzione str_pad().

Prova a realizzare lo script come ti ho suggerito e se ci sono problemi riporta il codice che stai usando.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

gent.mo Gianni, innanzitutto non credo di riuscire a contare tutte le parole contenute in un record a sua volta estratte da una tabella...il tutto diniamicamente.

poi mi viene in mente un problema, se ad es un campo è molto lungo, io ho bisogno di creargli una lunghezza max altrimenti poi mi sfora tutto, che ne so immagina un cognome molto lungo, se per creare le "tabelle" mi devo basare su quest'ultimo è probabile che non mi coincida con l'intesatzione es:

nome    cognome

xxx        yyyyyyy

xxxxxxxxxxx  yyyyy //qui anche assegnandogli un punto di spazio non mi coincide ugulamente con l'intestazione....quindi non so se è il caso anche di roncarlo qualosia sia più grande di x punti;

o ancora, con la funzione che dici tu, non posso troncare tutte le parole ad una determinata misura ed aggiungere degli spazi fittizi laddove non riempia tutta la "cella" ...spero di essere stato chiaro

es:

nome                cognome

10pt (spazi0)     30pt

altrimenti dovrei optare per un pdf ma, qua su unix la vedo moooolto dura,

grazie mille

risposto 9 anni fa
yusizu
X 0 X

I problemi che indichi sono tutti sormontabili, basta lavorarci un po' ...

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Nonostante avessi letto il titolo del topic non ho acceso il cervello prima di scrivere, era evidente che i tag html non servivano a nulla, chissà a che pensavo.

Cmq se opti per il pdf è + semplice di quanto pensi, ad esempio con fpdf ti imposti la cella con il ritorno a capo (a.e.) quindi se è più lunga viene aggiunta automaticamente la linea.

Ma per scegliere dipende da ciò che ci devi fare, il file di testo è successivamente manipolabile, il pdf no.

risposto 9 anni fa
LonelyWolf
X 0 X

il pdf andrebbe più che bene inqanto devo "salvare" e stampare delle fatture...però come ho già detto sono su unix e, se non vado errato quella a cui fai riferimento tu è una libreria per win.

sono messo male, non ho mai creato un pdf da php e...non saprei come gestire gli array di cui parla Gianni, sareste così gentili da postarmi qualcosa, giusto per capire i vari meccanismi...?

Il problema ormai credo sia chiaro, si tratta solo di allineare i record, o meglio assegnargli una posizione specifica, dettata dalla carta intestata.

Grazie mille

risposto 9 anni fa
yusizu
X 0 X

il pdf andrebbe più che bene inqanto devo "salvare" e stampare delle fatture...però come ho già detto sono su unix e, se non vado errato quella a cui fai riferimento tu è una libreria per win.

sono messo male, non ho mai creato un pdf da php e...non saprei come gestire gli array di cui parla Gianni, sareste così gentili da postarmi qualcosa, giusto per capire i vari meccanismi...?

Il problema ormai credo sia chiaro, si tratta solo di allineare i record, o meglio assegnargli una posizione specifica, dettata dalla carta intestata.

Grazie mille

Non credo ci siano limitazioni relative al SO con fpdf

http://www.fpdf.org/

risposto 9 anni fa
Lex84
modificato 9 anni fa
X 0 X

Non mi risulta questa cosa, fpdf è solo una classe ed è indipendente dalla piattaforma, dagli un'occhiata:

www.fpdf.org

Ora che ho acceso il cervello ti garantisco che funziona, prima la usavo su server win 2000, ora su suse linux.

risposto 9 anni fa
LonelyWolf
X 0 X

grazie mille per la dritta, sto smanettando col pdf, e devo dire che è un'ottima soluzione, ora devo un pò capire come organizzare la tebella e l'eventuale scrittura sull pagina successiva.

grazie mille, se avrò problemi saprò a chi rivolgermi,

 :bye:

risposto 9 anni fa
yusizu
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda